2016-09-27 3 views
1

컨트롤러에 키릴 기호를 보내려고합니다. 내가 AJAX를 통해 매개 변수를 전달하고 내 JSP의 상단에 ISO-8859-1봄 문자 인코딩

을받을 방법을 GET 오전시를 통해 컨트롤러에 보낼 때 : 나는 사용자 정의 필터를 만들려고 한

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 

하지만 내가 구성 MessageConverters

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

//Other configuration 

@Override 
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
    StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(); 
    stringConverter.setSupportedMediaTypes(Arrays.asList(new MediaType("text", "plain", Charset.forName("UTF-8")))); 
    converters.add(stringConverter); 

} 
} 
을 시도

@WebFilter(urlPatterns = "/*") 
public class EncodingFilter implements Filter { 

//INIT method 

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest servletRequest = (HttpServletRequest) request; 
    HttpServletResponse servletResponse = (HttpServletResponse) response; 

    String requestEncoding = servletRequest.getCharacterEncoding(); 

    if (requestEncoding == null) { 
     servletRequest.setCharacterEncoding(ENCODING); 
    } 

    String responseEncoding = servletResponse.getCharacterEncoding(); 

//  if (responseEncoding == null) { 
//   servletResponse.setCharacterEncoding(ENCODING); 
//  } 
     servletResponse.setCharacterEncoding(ENCODING); 

    chain.doFilter(servletRequest, servletResponse); 
} 

//DESTROY method 

항상 ISO-8859-1 응답으로 작업, 수신 인코딩을 doesnot

그리고 봄 CharacterEncodingFilter

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
protected String[] getServletMappings() { 
    return new String[]{"/"}; 
} 

@Override 
protected Class<?>[] getRootConfigClasses() { 
    return new Class<?>[]{ApplicationConfig.class}; 
} 

@Override 
protected Class<?>[] getServletConfigClasses() { 
    return new Class<?>[]{WebConfig.class}; 
} 

@Override 
protected Filter[] getServletFilters() { 

    CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); 
    characterEncodingFilter.setEncoding("UTF-8"); 
    characterEncodingFilter.setForceEncoding(true); 
    return new Filter[] { characterEncodingFilter}; 
} 
} 

하지만 도움이되지 않습니다, AJAX 요청

$(window).load(function(){ 

$("#firstUser").keyup(function(){ 
var value = $(this).val(); 
console.log(value); 

var searchRequest = $.ajax({ 
       type: "GET", 
       url: "calc/name", 
       encoding: "UTF-8", 
       data: { 
        'userName' : value 
       }, 
       dataType: "text", 
       success: function(msg){ 

       } 
      }); 

      }) 
}); 
+0

스프링에는 'CharacterEncodingFilter' 필터가 이미 올바르게 구성되어 있습니다. 나는 당신 자신의 것을 쓰는 대신에'AbstractAnnotationConfigDispatcherServletInitializer'를 사용할 것을 제안 할 것이다. 그러나 나는 당신이 아약스 요청을 보내는 방법에 오류가 있다고 의심됩니다. –

+0

아약스 요청을 보낼 때 contentType : "charset = utf-8"을 설정했습니다. AbstractAnnotationConfigDispatcherServletInitializer를 사용해 보았습니다. 결과는 같습니다. – Ilya

+0

대신 설명을 추가하고 코드를 추가하십시오. 나는'AbstractAnnotationConfigDispatcherServletInitializer' 사용을 말하지 않았지만 코드를 정리합니다. –

답변

0

나는 그것을 해결했습니다. 난 그냥 다른 바람둥이 버전을 설치합니다. Tomcat7에서 문제가 발생합니다. Tomcat8은 모든 것이 정상입니다.

PS : 톰캣/CONT에 server.xml의 두 버전

PSS 구성되었다 : 또한 WebConfig에 HttpMessageConverters 구성을 제거 하였다. 인코딩에 영향을주지 않습니다.