springboot全局字符编码设置解决乱码问题
有时候我们会发现这种问题,明明已经设置了字符编码过滤器但是还会有乱码的情况出现,这个问题令我们很是头疼,我之前也遇到过这种情况。那怎么解决呢?
springboot编码格式设置有三种方式,不管使用哪种方式,总有一款适合你。
1、在application.properties中设置
#编码格式 spring.http.encoding.force=true spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true server.tomcat.uri-encoding=UTF-8
如果出现乱码问题,这种方式解决的可能性不大,但可以尝试一下,希望还是要有的,万一解决了呢,因为查看源码发现springboot默认的编码格式就是UTF-8
2、自己手写编码过滤器
//字符编码过滤器 @WebFilter(urlPatterns="/*",filterName="CharacterEncodingFilter") publicclassCharacterEncodingFilterimplementsFilter{ @Override publicvoidinit(FilterConfigfilterConfig)throwsServletException{ } @Override publicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{ HttpServletRequestrequest=(HttpServletRequest)servletRequest; HttpServletResponseresponse=(HttpServletResponse)servletResponse; request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); filterChain.doFilter(request,response); } @Override publicvoiddestroy(){ } } 如果这种方式也解决不了问题的话,只能使用最后一种方式了。
3、使用java配置写一个字符编码配置类
/** *中文乱码解决 */ @Configuration publicclassCharsetConfigextendsWebMvcConfigurerAdapter{ @Bean publicHttpMessageConverterresponseBodyConverter(){ StringHttpMessageConverterconverter=newStringHttpMessageConverter( Charset.forName("UTF-8")); returnconverter; } @Override publicvoidconfigureMessageConverters(List >converters){ super.configureMessageConverters(converters); converters.add(responseBodyConverter()); } @Override publicvoidconfigureContentNegotiation(ContentNegotiationConfigurerconfigurer){ configurer.favorPathExtension(false); } }
StringHttpMessageConverter是一个请求和响应信息的编码转换器,通过源码我们发现默认编码ISO-8859-1,不是UTF-8,所以我们只要通过上述配置将请求字符串转为UTF-8即可
WebMvcConfigurerAdapter是springmvc的一个配置支配器类,我们可以实现我们感兴趣的方法。
其实现的接口WebMvcConfigurer定义了一些回调方法为springmvc提供一个通道通过java基本的配置。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。