我正在使用輔助函數來解碼 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 關注
- 148 瀏覽
添加回答
舉報
0/150
提交
取消