>  Q&A  >  본문

java - CharacterEncodingFilter 类

使用org.springframework.web.filter.CharacterEncodingFilter配置请求编码方式,使用@RequestBody接受ajax的application/json;charset=utf-8 传输中文乱码,配置如下

<filter>  
       <filter-name>springUtf8Encoding</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>springUtf8Encoding</filter-name>  
       <url-pattern>/*</url-pattern>  
   </filter-mapping> 

疑问:使用String data = URLEncoding.encode('数据',ISO-8859-1);
再URLDecode.decode(data,utf-8);即可得到正确的中文数据,我理解为tomcat将请求按照默认的编码ISO-8859-1来解析了,确实我也没有设置tomcat的默认编码格式,但是我同个项目的其它非ajax请求中文正常,猜测可能是CharacterEncodingFilter配置的没有拦截到我的请求,前辈帮忙看看哪里配置错了。还有个问题就是tomcat设置的默认编码类型和CharacterEncodingFilter设置的编码类型,是否有优先级的说法?

黄舟黄舟2763일 전785

모든 응답(1)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-18 09:52:24

    @RequestBody 이 주석을 사용하고 있다는 것은 포스터가 get 방식을 사용하고 있지 않다는 의미입니다. 매개변수가 URL에 없으면 URLEncoding.encode을 사용할 필요가 없습니다.

    으아악

    여기서 인코딩을 설정하시면 충분합니다.


    으아악

    forceEncodingtrue이며 response 매개변수에 영향을 주지 않는 request의 인코딩을 설정합니다.

    CharacterEncodingFilter의 실행 과정과 Filter의 실행 순서를 자세히 살펴보시기 바랍니다.

    회신하다
    0
  • 취소회신하다