2016-06-29 32 views
1

I Haben Sie eine Webanwendung, die einen HEAD-Aufruf vor dem tatsächlichen GET-Aufruf durchführt. Die GET-Methode erzeugt application/json. Wenn es einen Fehler gibt (500), ändert sich der Inhaltstyp des HEAD in text/html. Für denselben Fehler bleibt der Inhaltstyp für GET application/json. Gibt es eine Möglichkeit, den in HEAD zurückgegebenen Inhaltstyp zu überschreiben? So formuliere ich die Antwort. Dies ist eine Jersery-Implementierung.Inhaltstyp für HEAD-Anforderung überschreiben

Response.status(errorStatus)entity(some json).build() 

Antwort

0

Manish.

Ich wette, die org.apache.catalina.valves.ErrorReportValve quetscht Ihre Antwort.

Werfen Sie einen Blick auf die "Bericht" -Methode dieser Klasse. Wenn die Antwort 4xx oder 5xx und es hat keinen Inhalt (das heißt keine Einheit - was eine HEAD-Antwort muss nicht) (Linie 153), dann ... ErrorReportValve::report::153

die content-type zu text/html (Linie 283) eingestellt. Ihre Antwort wurde gerade gequetscht, aber ... ErrorReportValve::report::283

ErrorReportValve tut nichts zur Antwort, wenn es bereits festgeschrieben wurde (Zeile 102).

Versuchen Sie vielleicht, einen Servlet-Filter zu erstellen, der die Antwort festschreibt, bevor die ErrorReportValve ihn quittiert? So etwas wie https://gist.github.com/danmork/bf8c468141fa004298928a1ad9b31746, vielleicht?

+0

Danke Dan. Das hat mein Problem gelöst. Ich frage mich immer noch, warum es die Antwort auf Linie 283 quittiert. – Manish

+0

Gute Frage. Ich bin mir nicht sicher. Meine beste Vermutung ist, dass sie wahrscheinlich darüber nachgedacht haben, was zu tun ist, wenn Ausnahmen auftreten, bevor der Handler (Servlet) etwas in den Puffer schreiben konnte (daher die Prüfung auf keinen Inhalt). Es scheint ein Fehler zu sein, die Anfrage-Methode (z.B. HEAD) nicht zu überprüfen. –