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.
我正在尝试为杜松子酒验证自定义错误消息并遵循此线程中的建议: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.