SpringBoot字符编码处理
Springboot处理字符编码可以通过Filter过滤器进行拦截实现,使用的是SpringWeb提供的CharacterEncodingFilter(字符编码过滤器类),将其FilterRegistrationBean注册,设置拦截路径就可以了。
@Configuration
public class ServletConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
//CharacterEncodingFilter SpringWeb提供的过滤器类
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setForceEncoding(true);//强制编码
characterEncodingFilter.setEncoding("UTF-8");
registrationBean.setFilter(characterEncodingFilter);//注册的过滤器拦截的路径
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
}
注意:只有当在application.properties配置文件将spring.http.encoding.enabled=false后(默认是true),这个过滤器才会起作用。
测试:
在之前的HeServlet中输出到浏览器的信息添加点中文
public class HeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("heServlet");
resp.getWriter().write("heServlet to page by九月");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
然后把配置文件以及在配置类中注册的过滤器Bean信息先注册掉,在浏览器访问http://localhost:8088/heServlet。
heServlet to page by??
把配置文件以及在配置类中注册的过滤器Bean信息启用,在浏览器访问
有时候这么做了,但是 resp.getWriter().write("heServlet to page by九月");到浏览器的中文字符还是乱码,因为不同浏览器的默认返回编码不是UTF-8,这时候可以这么改。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
System.out.println(name);
System.out.println("heServlet");
resp.setContentType("text/html;charset=UTf-8");
resp.getWriter().write("heServlet to page by九月");
}
SpringBoot可以直接在配置文件中配置编码(建以使用)
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true