go-zero 自定义错误后,请求参数不传,返回异常的处理方式

1,161 阅读1分钟

照着教程 错误处理 · go-zero document 学习go-zero框架的时候,发现不传某个参数的时候,返回数据为空,控制台提示error

image.png 仔细看了下 自定义错误代码:

const defaultCode = 1001

type CodeError struct {
   Code int    `json:"code"`
   Msg  string `json:"msg"`
}

type CodeErrorResponse struct {
   Code int    `json:"code"`
   Msg  string `json:"msg"`
}

func NewCodeError(code int, msg string) error {
   return &CodeError{Code: code, Msg: msg}
}

func NewDefaultError(msg string) error {
   return NewCodeError(defaultCode, msg)
}

func (e *CodeError) Error() string {
   return e.Msg
}

func (e *CodeError) Data() *CodeErrorResponse {
   return &CodeErrorResponse{
      Code: e.Code,
      Msg:  e.Msg,
   }
}

API代码:

type UserLoginReq {
   Username string `form:"username"`
   Password string `form:"password"`
}

实现代码:

if len(strings.TrimSpace(req.Username)) == 0 || len(strings.TrimSpace(req.Password)) == 0 {
   return nil, errorx.NewDefaultError("参数错误")
}

都没有问题,后面看文档发现,go-zero里面的参数是必填的,自己选择自定义错误,参数没填,过不了框架里面的第一步校验,故将参数改为可选填的,然后再由代码校验即可

type UserLoginReq {
   Username string `form:"username,optional"`
   Password string `form:"password,optional"`
}

image.png 或者直接跟demo一样

type UserLoginReq {
   Username string `json:"username"`
   Password string `json:"password"`
}

然后提交的时候用:

image.png