获取参数编码

Eri*_*rik 10 spring spring-mvc java-ee

我在GET请求中使用spring mvc和special chars时遇到问题.请考虑以下方法:

@RequestMapping("/update")
public Object testMethod(@RequestParam String name) throws IOException {
    }
Run Code Online (Sandbox Code Playgroud)

例如,我向其发送名称中包含"ä"(德语变音符号)的GET请求.它导致弹簧接收"¤",因为浏览器将"ä"映射到%C3%A4.

那么,我怎样才能获得正确的编码字符串?

谢谢你的帮助!

小智 44

您遇到此问题,因为请求区分了正文编码和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:运行

  • 我没有连接器直接使用Tomcat.您描述的解决方案仍可以使用吗? (2认同)

Rih*_*rds 7

那这个呢?它有帮助吗?

在您的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>
Run Code Online (Sandbox Code Playgroud)

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 对于后来的读者:我试过这个,但它只适用于POST而不是GET. (5认同)
  • 我已经尝试过过滤器org.springframework.web.filter.CharacterEncodingFilter,它附带了spring并按照你的描述进行操作.不幸的是没有结果. (2认同)