简体   繁体   中英

Spring Character Encoding

I am trying send to the controller cyrillic symbols. When I send to the controller via when I am pass parameters via AJAX and GET method I receive ISO-8859-1

On the top of my jsp:

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

I have tried to create custom filter but it doesnot work, incoming encoding into response always 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

I have tried configure 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);

}
}

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

But it does not help, AJAX request

    $(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){

                }
            });

            })
});

I fixed it. I just install other tomcat version. Issue appears with Tomcat7, with Tomcat8 everything is ok.

PS: server.xml into Tomcat/conf were configured in both versions

PSS: I also removed HttpMessageConverters configuration into WebConfig. This does not affect the encoding.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM