我已經編寫了一個REST API服務,要求所有響應都是JSON。但是,當Go http請求解析器遇到錯誤時,它將以純文本響應的形式返回400,而不會調用我的處理程序。例如:如何爲解析錯誤定製Golang http 400響應?
> curl -i -H 'Authorization: Basic hi
there' 'http://localhost:8080/test' -v
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /test HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
> Authorization: Basic hi
> there
>
< HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
< Content-Type: text/plain; charset=utf-8
Content-Type: text/plain; charset=utf-8
< Connection: close
Connection: close
<
* Closing connection 0
請注意無效的授權標頭。當然,400是正確的迴應,但它當然是文本/純文本。有什麼方法可以配置Go HTTP解析器使用自定義錯誤響應媒體類型和主體?
你在使用某種框架嗎?我從來沒有見過stdlib http處理程序的這種行爲。 – Adrian
沒有。這裏有一個[愚蠢的簡單例子](https://play.golang.org/p/5iOUCklUeH)。 – theory