首页 > 解决方案 > 验证 HTTP 请求以检查是否包含所有必填字段

问题描述

我正在使用gin来创建一个 http 服务器。我想在开始调用其他函数之前验证每个 HTTP 请求。

我创建了一个struct名为CreateUser来验证所有传入的 HTTP POST 请求CreateUser

type CreateUser struct {
   FirstName string `validate:"min:2, regexp=^[a-zA-Z]*$"`
   LastName  string `validate:"min:2, regexp=^[a-zA-Z]*$"`
   Email     string `validate:"min:10, max=255 regexp=^[0-9a-zA-Z]*@[a-z]*$"`
}

当请求UserCreate发生时,将调用以下函数。但即使我没有firstName在 post 请求中发送。验证通过,没有错误。这可能是什么原因?我如何验证它架构的每一个 HTTP 请求?

func (uhc UserHttpController) UserCreate(ctx *gin.Context) {
    var createUser config.CreateUser
    if err := ctx.BindJSON(&createUser); err != nil {
        // send the bad request response
        ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    createdUser := InitUserController(uhc.globalVars).UserCreate(createUser)
    ctx.JSON(http.StatusOK, gin.H{
        "data": createdUser,
    })
}

我尝试不发送lastNamePOST 请求正文,但在调试时将LastName其初始化为""空字符串,因此不会发生错误。

标签: validationhttpgostruct

解决方案


推荐阅读