如何在SpringBoot中配置CharacterEncodingFilter?

nav*_*vee 26 encoding spring-boot

我在学习Spring Boot时遇到了一些编码问题; 我想添加像Spring 3.x这样的CharacterEncodingFilter.像这样:

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

Fri*_*rdt 59

由于春季启动1.4.2注册自己CharacterEncodingFilter将工作只当您通过设置禁用Spring自身这个bean实例,spring.http.encoding.enabled=falseapplication.properties.

但是,通过将这些设置添加到application.properties,可以在没有任何Filter实例化的情况下解决此问题:

# Charset of HTTP requests and responses. Added to the "Content-Type" header if not set explicitly.
spring.http.encoding.charset=UTF-8
# Enable http encoding support.
spring.http.encoding.enabled=true
# Force the encoding to the configured charset on HTTP requests and responses.
spring.http.encoding.force=true
Run Code Online (Sandbox Code Playgroud)

来源:附录A.常见的应用程序属性

  • 你是对的,使用属性是更好的选择. (3认同)
  • 自 Spring Boot 2.3 起:spring.http。属性已移至 server.servlet.encoding.、spring.mvc。和 spring.codec。,请参阅#18827。 (3认同)

mik*_*ika 12

Application.java类的示例代码,如上面的注释中所提出的:

@Bean
public FilterRegistrationBean filterRegistrationBean() {
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
    characterEncodingFilter.setForceEncoding(true);
    characterEncodingFilter.setEncoding("UTF-8");
    registrationBean.setFilter(characterEncodingFilter);
    return registrationBean;
}
Run Code Online (Sandbox Code Playgroud)


Mak*_*iuk 6

我也更喜欢application.properties配置。但spring.http.encoding在新的 Spring Boot 版本 (>2.3) 中已弃用。所以新的 application.setting 应该是这样的:

server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
Run Code Online (Sandbox Code Playgroud)