Ich habe einen REST-API-Dienst geschrieben, der erfordert, dass alle Antworten JSON sind. Wenn der Go HTTP-Anfrageparser jedoch einen Fehler feststellt, wird 400 als Nur-Text-Antwort zurückgegeben, ohne dass jemals ein Handler aufgerufen wird. Beispiel:Wie kann ich Golong http 400 Antworten für Parse-Fehler anpassen?
> 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
Beachten Sie die ungültige Autorisierungskopfzeile. Natürlich ist 400 die richtige Antwort, aber es ist natürlich Text/Ebene. Gibt es eine Möglichkeit, den Go http-Parser so zu konfigurieren, dass er benutzerdefinierte Fehlerreaktions-Medientypen und -körper verwendet?
Verwenden Sie ein Framework von einer Art? Ich habe dieses Verhalten noch nie mit dem http-Handler stdlib gesehen. – Adrian
Nein. Hier ist ein [dummes einfaches Beispiel] (https://play.golang.org/p/5iOUCklUeH). – theory