2016-06-25 13 views
0

servletに提供するいくつかのパラメータに基づいてApache Solrからデータを呼び出して取得するservletを作成するときに私が目にした奇妙な動作です。サーブレットが応答を予期せずBase64形式で返す

servletSolrを照会し、データをjson形式で返信します。次に、System.out.println(response)を入力して確認します。それはjson形式でしかありませんでした。

私の問題は、このサービスを利用していたクライアントに対して同じ応答を受け取った場合、データがBase64形式で返されることです。私のコードでは、応答をBase64に変換する行は1行も書いていませんでした。回答を送る前に書いた唯一の行はresp.setContentType("application/json")でした。

回答を送信する前にresp.setCharacterEncoding("UTF-8");servletに設定して後で解決しましたが、クライアント側で質問するたびにの応答のみを受信したか、またはREST clientで回答しました。でも、なぜそれが起きたのだろうと、なぜJSONとしてservletから返された応答がBase64に変換されるのだろうと思いますか?

誰もこれまでにこのような経験がありますか?

私はサーバーとしてApache Tomcatを使用しています。

答えて

0

これは、おそらくJavaサーブレットフレームワークのプロパティです。 Solrのコンテンツに英語以外のUnicodeの文字が含まれている可能性があります。したがって、アルゴリズムは実際にはバイナリの応答であり、base64(おそらく変更されたMIMEタイプのヘッダを持つ)にコード化していると考えます。

文字エンコーディングを設定すると、すべての文字が予想され、エスケープする必要はないことがフレームワークに伝えられます。

これはTomcatでもかまいません。しかし、文書検索の焦点は、私の意見ではバイナリ・コンテンツをエスケープすることにあるはずです。

+0

私のサーブレットで、Solrから受け取った応答を印刷すると、すべてJSONのみになります。 Solrの全インデックスは英語のみで構成されているので、TomcatがBase64で送信された応答に相当すると解釈しようとしていますか?ここで注目すべき点の1つは、私のサーブレット内でSolrにHTTP POST要求を出す間に、私はすでにエンコーディングをUTF-8として設定していたことです。だから私はまだUTF-8として文字エンコーディングを強制する応答を設定する必要がありますか?また、Google App Engine内で実行される同じサーブレットではこのような問題は発生せず、レスポンスはJSON形式でのみ受信されます。 –

+0

あなたはあなた自身の質問に答えています。どのような違いがエンコーディングを引き起こしますか? Tomcatのように聞こえるので、それに焦点を当てます。 –

+0

うーん...それをします。しかし、この問題は文字エンコーディングを設定することで解決されているので、後で考えてみることができます。この種の動作については、Tomcatのドキュメントで具体的な記述は見つかりませんでした。アプリケーションサーバーはその考慮に基づいて変更できますか? –

関連する問題