问题背景:
希望在post参数错误时返回自定义的提示信息,但http状态码始终返回400
if err := c.BindJSON(&xxx); err != nil {
fmt.Println("解析参数失败, err: %+v", err)
c.JSON(http.StatusOK, "参数错误")
return
}
原因: MustBindWith在参数错误时返回400
// BindJSON is a shortcut for c.MustBindWith(obj, binding.JSON).
func (c *Context) BindJSON(obj interface{}) error {
return c.MustBindWith(obj, binding.JSON)
}
// MustBindWith binds the passed struct pointer using the specified binding engine.
// It will abort the request with HTTP 400 if any error occurs.
// See the binding package.
func (c *Context) MustBindWith(obj interface{}, b binding.Binding) error {
if err := c.ShouldBindWith(obj, b); err != nil {
c.AbortWithError(http.StatusBadRequest, err).SetType(ErrorTypeBind) // nolint: errcheck
return err
}
return nil
}
解决方法 : 绑定结构体时使用ShouldBind系列
本文探讨了在Go语言中,当POST参数错误时如何返回自定义的错误提示而不改变HTTP状态码为400的问题。通过分析`MustBindWith`函数的源码,发现其在参数校验失败时会直接返回400状态码。解决方案是改用`ShouldBindWith`系列方法,这样在参数错误时可以捕获错误并自定义响应。
6万+

被折叠的 条评论
为什么被折叠?



