こんにちはスタックオーバーフラワーです。
助けが必要な問題があります:
スマートフォン アプリから Java/Spring MVC アプリケーションへの http GET Web サービス呼び出しを行っています。mod_proxy プロキシが設定された Apache サーバーが前面にある Tomcat アプリケーション サーバーを使用しています。
URL に埋め込まれているパラメータの 1 つに「Männen」という単語があります。これは、パラメータの 1 つである組織名です。アプリは Jquery Ajax GET リクエストを作成し、パラメーターはアプリを「M%E4nnen」のままにします。これは、私の理解では、「ä」が適切に URL エンコードされていることを意味します。スプリングコントローラーに届くと「まんねん」に歪んでいます。
私はググって、これに関するかなりの数のスレッドを見つけました。それらはすべて、すべてのコネクタに URIEncoding="UTF-8" を追加して、Tomcat server.xml ファイルを変更することを推奨しています。もちろん、私はこれを試しました。変更しましたが、問題は解決しませんでした。文字列は "M�nnen" として表示されます。Apache プロキシ設定の ProxyPass パラメータに「nocanon」を追加することを提案するスレッドもありました。これは試してみましたが、違いはありませんでした。
ログを使用して、リクエストを追跡できます。
- Apache アクセス ログでは、パラメータは「M%E4nnen」として記録されます。
- Apache プロキシ ログでは、パラメータは「M%E4nnen」として記録されます。
- Tomcat localhost_access ログでは、パラメーターは「M%E4nnen」として記録されます。
- リクエストを受信したSpringコントローラーでは、パラメーターは「M�nnen」としてログに記録されます
私のSpringアプリケーションにも文字エンコーディングフィルターがありますが、私が理解している限り、リクエストボディでのみ機能します。以下に示すように構成されています。
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
他に何を試すべきか、他にどこを見ればよいか本当にわかりません。誰かが私を正しい方向に導くことができれば、それは大歓迎です.