1、在application.properties中设置
1#编码格式 2spring.http.encoding.force=true 3spring.http.encoding.charset=UTF-8 4spring.http.encoding.enabled=true 5server.tomcat.uri-encoding=UTF-8
2、自己手写编码过滤器
1//字符编码过滤器 2@WebFilter(urlPatterns = "/*",filterName = "CharacterEncodingFilter") 3public class CharacterEncodingFilter implements Filter{ 4 @Override 5 public void init(FilterConfig filterConfig) throws ServletException { 6 } 7 8 @Override 9 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 10 HttpServletRequest request = (HttpServletRequest) servletRequest; 11 HttpServletResponse response = (HttpServletResponse) servletResponse; 12 request.setCharacterEncoding("UTF-8"); 13 response.setCharacterEncoding("UTF-8"); 14 15 filterChain.doFilter(request , response); 16 } 17 @Override 18 public void destroy() { 19 } 20}
3、使用java配置写一个字符编码配置类
1/** 2 * 中文乱码解决 3 */ 4@Configuration 5public class CharsetConfig extends WebMvcConfigurerAdapter { 6 @Bean 7 public HttpMessageConverter<String> responseBodyConverter() { 8 StringHttpMessageConverter converter = new StringHttpMessageConverter( 9 Charset.forName("UTF-8")); 10 return converter; 11 } 12 @Override 13 public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 14 super.configureMessageConverters(converters); 15 converters.add(responseBodyConverter()); 16 } 17 @Override 18 public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { 19 configurer.favorPathExtension(false); 20 } 21}
StringHttpMessageConverter是一个请求和响应信息的编码转换器,通过源码我们发现默认编码ISO-8859-1,不是UTF-8,所以我们只要通过上述配置将请求字符串转为UTF-8 即可。
WebMvcConfigurerAdapter 是springmvc的一个配置支配器类,我们可以实现我们感兴趣的方法。