2016-06-25 5 views
0

Dies ist über ein seltsames Verhalten, das ich erlebt habe, während eine servlet, die Daten von Apache Solr basierend auf einigen Parametern, die ich zu servlet liefern anrufe und abruft.Servlet Antwort unerwartet im Base64-Format

Die servlet Abfragen Solr und gibt Daten an mich im JSON-Format zurück. Überprüfen Sie es dann, indem Sie eine System.out.println(response) platzieren. Es war nur im json-Format.

Mein Problem ist, dass, wenn ich dieselbe Antwort über einen Client erhielt, der diesen Dienst verwendete, Daten im Format Base64 zurückgegeben. In meinem Code habe ich nicht einmal eine Zeile geschrieben, die die Antwort in Base64 konvertiert. Die einzige Zeile, die ich vor dem Senden der Antwort geschrieben habe, war resp.setContentType("application/json").

Obwohl ich es später löste, indem ich resp.setCharacterEncoding("UTF-8"); in meinem servlet vor dem Senden der Antwort löste. Dann erhielt ich nur JSON Antwort jedes Mal, wenn ich auf der Client-Seite oder über eine REST client abgefragt habe. Aber ich frage mich immer noch, warum das passiert ist, warum eine Antwort, die als JSON von servlet in Base64 konvertiert wurde?

Hat jemand so etwas schon mal erlebt?

Ich verwende Apache Tomcat als meinen Server.

Antwort

0

Dies ist höchstwahrscheinlich die Eigenschaft Ihres Java-Servlet-Frameworks. Es ist möglich, dass Ihr Solr-Inhalt Zeichen aus dem Unicode-Bereich außerhalb von Englisch enthält. Daher denkt der Algorithmus, dass es sich tatsächlich um eine binäre Antwort handelt, und codiert sie in base64 (möglicherweise mit einem geänderten mime-type-Header).

Die Einstellung der Zeichencodierung zeigt an, dass der gesamte Zeichenbereich erwartet wird und kein Escaping erforderlich ist.

Oder dies könnte in Tomcat sein. Der Schwerpunkt Ihrer Dokumentationssuche sollte meiner Meinung nach jedoch auf der Entfernung von binären Inhalten liegen.

+0

In meinem Servlet, wenn ich die Antwort von Solr drucke, ist es nur JSON. Und der ganze Index in Solr besteht nur aus englischer Sprache. Also, versuchen Sie zu sagen, dass Tomcat interpretiert hat, dass die Antwort in Base64 gesendet werden sollte? Ein Hinweis hier ist, dass ich, während ich eine HTTP-POST-Anfrage an Solr innerhalb meines Servlets mache, meine Kodierung bereits als UTF-8 eingestellt habe. Warum muss ich also die response-durchsetzende Zeichencodierung als UTF-8 einstellen? Das gleiche Servlet, wenn es in Google App Engine ausgeführt wird, erzeugt keine solchen Probleme und die Antwort wird nur im JSON-Format empfangen. –

+0

Nun, Sie beantworten Ihre eigenen Fragen. Welcher Unterschied löst die Kodierung aus? Klingt wie Tomcat, also konzentriere dich darauf. –

+0

Hmm ... werde das tun. Aber da dieses Problem gelöst wird, indem Sie die Zeichenkodierung einstellen, können nur Nachhinein gemacht werden.Tried Tomcat Dokumentation für diese Art von Verhalten, fand keine bestimmten Aussagen. Aber es wirft eine Frage auf, dass die Integrität des Datenformats ist so anfällig, dass Ein Application Server kann ihn aufgrund seiner Berücksichtigung ändern? –