SpringBoot——SpringBoot中设置字符集编码的两种方式

Posted 张起灵-小哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot——SpringBoot中设置字符集编码的两种方式相关的知识,希望对你有一定的参考价值。

1.方式一(使用传统的Spring提供的字符集过滤器)

先写一个Servlet。

package com.songzihao.springboot.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *
 */
@WebServlet(urlPatterns = "/myservlet")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("世界你好,Hello World!!!");
        //统一设置浏览器编码格式
        resp.setContentType("text/html;character=utf-8");
        resp.getWriter().flush();
        resp.getWriter().close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

之后创建配置类 SystemConfig,在其中声明字符集过滤器的相关配置。

package com.songzihao.springboot.config;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;

/**
 *
 */
@Configuration
public class SystemConfig {

    @Bean
    public FilterRegistrationBean characterEncodingFilterRegistrationBean() {
        //创建字符集编码过滤器
        CharacterEncodingFilter characterEncodingFilter=new CharacterEncodingFilter();
        //设置强制使用指定的字符集编码
        characterEncodingFilter.setForceEncoding(true);
        //设置指定的字符集编码
        characterEncodingFilter.setEncoding("utf-8");

        FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
        //设置字符集编码过滤器
        filterRegistrationBean.setFilter(characterEncodingFilter);
        //设置字符集编码过滤器的路径
        filterRegistrationBean.addUrlPatterns("/*");
        return filterRegistrationBean;
    }
}

在SpringBoot核心配置文件中 关闭 SpringBoot 的 的 http 字符编码支持。

#关闭springboot的http字符编码支持
#只有关闭该选项之后,spring字符集编码过滤器才会生效
server.servlet.encoding.enabled=false

最后启动测试。

package com.songzihao.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan(basePackages = "com.songzihao.springboot.servlet")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}


2.方式二(在 application.properties 中配置字符编码(推荐))

先写一个Servlet。

package com.songzihao.springboot.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *
 */
@WebServlet(urlPatterns = "/myservlet")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("世界你好,Hello World!!!");
        //统一设置浏览器编码格式
        resp.setContentType("text/html;character=utf-8");
        resp.getWriter().flush();
        resp.getWriter().close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

在 SpringBoot 核心配置文件添加字符编码设置。

#设置请求响应的字符编码
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
server.servlet.encoding.charset=utf-8

最后启动测试。

package com.songzihao.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan(basePackages = "com.songzihao.springboot.servlet")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

 

以上是关于SpringBoot——SpringBoot中设置字符集编码的两种方式的主要内容,如果未能解决你的问题,请参考以下文章

Springboot中设置返回数据的时间格式

如何在 springboot graphql 应用程序中设置基本 url

还不会在 SpringBoot 中设置 HTTP 缓存?来造个轮子~

还不会在 SpringBoot 中设置 HTTP 缓存?来造个轮子~

如何在 Spring Boot 中设置 enableLoggingRequestDetails='true'

如何在SpringBoot中设置HTTP缓存,你知道么?