我在GET请求中使用spring mvc和特殊字符时出现问题。考虑以下方法:例如,我向其发送名称包含“ä”(德语变音符号)的GET请求,并向其发送GET请求。由于浏览器将“ä”映射到%C3%A4
,导致春天收到“Ô。获取参数编码
那么,我怎样才能得到正确的编码字符串我的控制器?
感谢您的帮助!
我在GET请求中使用spring mvc和特殊字符时出现问题。考虑以下方法:例如,我向其发送名称包含“ä”(德语变音符号)的GET请求,并向其发送GET请求。由于浏览器将“ä”映射到%C3%A4
,导致春天收到“Ô。获取参数编码
那么,我怎样才能得到正确的编码字符串我的控制器?
感谢您的帮助!
这是怎么回事?它可以帮助吗?
在你的web.xml:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.example.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<servlet-name>dispatcher</servlet-name>
</filter-mapping>
com.example.CharacterEncodingFilter:
public class CharacterEncodingFilter implements Filter {
protected String encoding;
public void init(FilterConfig filterConfig) throws ServletException {
encoding = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
request.setCharacterEncoding(encoding);
filterChain.doFilter(servletRequest, servletResponse);
}
public void destroy() {
encoding = null;
}
}
我已经试过过滤器org.springframework.web.filter.CharacterEncodingFilter,它随Spring一起提供,并执行您的描述。不幸的是没有结果。 – Erik 2011-03-27 11:11:51
非常奇怪..不知道它可能是什么。 – Rihards 2011-03-27 12:49:14
也许来自浏览器*的数据不是utf-8 *,因为表单页面*不是utf-8 *。 – bmargulies 2011-03-28 15:01:08
您遇到这个问题,因为请求体编码和URI区分编码。 CharacterEncodingFilter设置正文编码,但不设置URI编码。
您需要设置URIEncoding =“UTF-8”作为Tomcat server.xml中所有连接器的属性。看到这里:http://tomcat.apache.org/tomcat-6.0-doc/config/ajp.html
或者,或者,您可以设置useBodyEncodingForURI =“True”。
如果您正在使用Maven的Tomcat插件,只需要添加此参数:
MVN -Dmaven.tomcat.uriEncoding = UTF-8 tomcat的:运行
是如何URL编码?这里只有一种标准编码:utf-8,根据需要编码%。 – bmargulies 2011-03-26 23:13:08
请求的URL编码为'...%C3%A4' – Erik 2011-03-28 14:57:16