我正在使用辅助函数来解码 JSON。它返回一个自定义错误类型,其中填充了无法解析 JSON 的原因和我应该返回的 HTTP 代码。package dtotype MalformedRequestError struct { Status int Message string}func (mr *MalformedRequestError) Error() string { return mr.Message}解码主体时我做的第一件事就是检查客户端是否正确设置了 Content-Type 标头。package webhandlersfunc decodeJSONBody(w http.ResponseWriter, r *http.Request, dst interface{}) error { if r.Header.Get("Content-Type") != "" { value, _ := header.ParseValueAndParams(r.Header, "Content-Type") if value != "application/json" { Message := "Content-Type header is not application/json" return &dto.MalformedRequestError{Status: http.StatusUnsupportedMediaType, Message: Message} } } ... etc ...我尝试使用它errors.As()来检查该函数是否正在返回我的自定义错误,但它不起作用。package webhandlersfunc (i *InternalTokenHandler) Post(w http.ResponseWriter, r *http.Request) { type postRequest struct { Google_id_token string } // parse request data var parsedRequest postRequest err := decodeJSONBody(w, r, &parsedRequest) if err != nil { // outputs *dto.MalformedRequestError fmt.Println(fmt.Sprintf("%T", err)) var mr *dto.MalformedRequestError if errors.As(err, &mr) { http.Error(w, mr.Message, mr.Status) } else { log.Println(err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) } return } .... more code ...我检查过错误的类型是*dto.MalformedRequestError,但我的代码总是到达else块并返回通用服务器 500 错误。我错过了什么 - 为什么 errors.As() 无法识别错误类型?
- 1 回答
- 0 关注
- 121 浏览
添加回答
举报
0/150
提交
取消