gin碰到的路由状态码问题
// @Tags 用户模块
// @Summary 登录
// @Produce json
// @Param info body models.Auth false "info"
// @Success 200 {object} app.Response
// @Failure 500 {object} app.Response
// @Router /api/v1/login [post]
func GetAuth(c *gin.Context) {
// appG := app.Gin{C: c}
// valid := validation.Validation{}
// user := make(map[string]string)
// c.BindJSON(&user)
// username := user["username"]
// password := util.EncodeMD5(user["password"])
// fmt.Println("password:", password)
// a := auth{Username: username, Password: password}
// ok, _ := valid.Valid(&a)
// appG.SuccessJson(nil)
c.JSON(200, nil)
return
}
在以上代码中,我把
// user := make(map[string]string)
// c.BindJSON(&user)
这两行注释掉后,此接口返回的状态码会变成400,不注释的话又是正常的。非常非常不解。。(刚学GO的菜鸟)
下面是相关的截图
2021-9-12更新
我发现c.BindJSON(&user)这个方法体里面调用了MustBindWith方法,它会返回异常状态码。
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
}
类似的c.Bind方法也是如此。如果这样的话,不知大佬们是怎么避免入参校验错误时,仍返回200状态码的?(因为我希望状态码统一设为200,前端通过我JSON中给的code进行错误处理。)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题已解决。
绑定结构体时使用ShouldBind系列方法
参考:https://www.cnblogs.com/Apale...
成功时:
失败时:
无论是错误还是正确
只要是没有panic的错误都应该返回200http状态码
调用接口方拿到返回结果以后用code去判断是不是正常返回
要不要抛出msg错误信息