Я написал службу REST API, которая требует, чтобы все ответы были в формате JSON. Однако, когда парсер Go 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 для использования пользовательских типов и тел ответов на ошибки?