SpringBoot字符编码处理

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

你可能感兴趣的:(Java)