我在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