首页 > 解决方案 > Go Gin Validate:以 JSON 格式返回错误

问题描述

我的应用中有两个 GORM 模型:

type Author struct {
    Model
    Name  string `json:"name" binding:"required"`
    Books []Book `json:"books" gorm:"foreignkey:AuthorID" binding:"dive"`
}

type Book struct {
    Model
    Name     string    `json:"name" binding:"required"`
    AuthorID uuid.UUID `json:"-"`
}

使用 Gin,我正在尝试验证发布的数据:

func createAuthor(c *gin.Context) {
    var author Author
    if err := c.ShouldBindJSON(&author); err != nil {
        errors, _ := err.(validator.ValidationErrors)
        e := make(map[string]string)
        for _, err := range errors {
            e[err.Field()] = err.Tag()
        }
        c.JSON(400, e)
        return
    }
    db.Create(&author)
    c.JSON(200, author)
}

发布类似的内容时:

{
    "name": "Author name",
    "books": [
        {}
    ]
}

您将收到如下错误的响应:

{
    "Name": "required"
}

我想得到的是以下内容:

{
    "books": [
        {
            "name": [
                "required"
            ]
        }
    ]
}

标签: validationgogo-gormgo-gin

解决方案


推荐阅读