2016-09-27 32 views
1

我想發送到控制器西里爾符號。 當我通過當我通過AJAX傳遞參數和GET方法我收到ISO-8859-1春季字符編碼

在我的JSP的頂部發送到控制器:

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

我試圖創建自定義過濾器但它亙古不變的工作,進入編碼爲響應總是ISO-8859-1

@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 

我曾嘗試配置了MessageConverter

@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); 

} 
} 

春季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

Spring已經爲'CharacterEncodingFilter'正確配置了一個過濾器。我會建議使用'AbstractAnnotationConfigDispatcherServletInitializer'而不是自己寫。但是我會懷疑錯誤在於你如何發送你的ajax請求。 –

+0

當我發送ajax請求時,我設置contentType:「charset = utf-8」。試過使用AbstractAnnotationConfigDispatcherServletInitializer,結果是一樣的。 – Ilya

+0

而不是試圖描述它,添加代碼。我沒有說使用'AbstractAnnotationConfigDispatcherServletInitializer',但它清理你的代碼。 –

回答

0

我固定它。我只是安裝其他的tomcat版本。問題出現在Tomcat7上,Tomcat8一切正常。

PS:server.xml中到Tomcat/CONF是在兩個版本配置

PSS:我也刪除HttpMessageConverters配置成WebConfig。這不影響編碼。