Go Gin Validate: возвращать ошибки как JSON - PullRequest
0 голосов
/ 15 марта 2020

В моем приложении две модели 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:"-"`
}

Используя Джин, я пытаюсь проверить опубликованные данные:

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"
            ]
        }
    ]
}
...