Gin 绑定中间件总是失败

Gin binding middleware always fail

我正在尝试为杜松子酒验证自定义错误消息并遵循此线程中的建议:https://github.com/gin-gonic/gin/issues/430

我正在以这种方式尝试 gin 绑定中间件:

package main

import (
    "fmt"
    "net/http"
    "github.com/gin-gonic/gin"
)

type itemPostRequest struct {
    Name string `json:"name" binding:"required"`
}

func main() {
    router := gin.Default()
    router.Use(func (c *gin.Context) {
        c.Next()
        fmt.Println(c.Errors)
    })
    router.POST("/item", gin.Bind(itemPostRequest{}), func (c *gin.Context) {
        fmt.Println("Im inside handler")
        req := c.MustGet(gin.BindKey).(*itemPostRequest)
        fmt.Println(req)
        c.JSON(http.StatusOK, gin.H{"success": true})
    })
    router.Run()
}

我使用 Postman 发送请求,但尽管我发送了正确的请求,但它总是说: 键:'itemPostRequest.Name' Error:Field 对 'Name' 的验证在 'required' 标签上失败

如果我不使用绑定中间件:

router.POST("/item", func (c *gin.Context) {
  ...

它有效,但我希望能够在转到处理程序之前绑定和 return 错误,就像线程上的建议一样。为什么这不起作用?谢谢

感谢评论,我意识到我错过了 Content-Type application/json。我没有意识到这一点,因为我以前使用过 c.ShouldBindWithJSON 而它不需要这个 header.