你好 Stackoverflowers 同胞。
我有一个需要帮助的问题:
我们正在从智能手机应用程序对 Java/Spring MVC 应用程序进行 http GET Web 服务调用。我们在一个 Tomcat 应用程序服务器上,该服务器由一个带有 mod_proxy 代理设置的 Apache 服务器前置。
URL 中嵌入的参数之一是单词“Männen”,它是作为参数之一的组织名称。该应用程序发出一个 Jquery Ajax GET 请求,并且该参数将应用程序保留为“M%E4nnen”,据我了解,这意味着“ä”已正确进行 URL 编码。当它到达 Spring 控制器时,它已被扭曲为“Männen”。
我用谷歌搜索并发现了很多关于此的线程,他们都建议通过将 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>
我真的不知道还有什么可以尝试或去哪里看。如果有人能指导我正确的方向,将不胜感激。