如何在SpringBoot中配置CharacterEncodingFilter?

如何在SpringBoot中配置CharacterEncodingFilter?,encoding,spring-boot,Encoding,Spring Boot,我在学习Spring Boot时遇到了一些编码问题; 我想添加一个字符编码过滤器,如Spring 3.x。 就这样, <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param

我在学习Spring Boot时遇到了一些编码问题; 我想添加一个字符编码过滤器,如Spring 3.x。 就这样,

<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>
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true

编码滤波器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
编码滤波器
/*

上面评论中建议的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;
}

由于Spring Boot 1.4.2只有在您通过在application.properties中设置
Spring.http.encoding.enabled=false来禁用Spring自己的这个bean实例时,注册您自己的CharacterEncodingFilter才会起作用

但是,可以通过将这些设置添加到application.properties中来解决此问题,而无需任何筛选器实例化:

HTTP请求和响应的字符集。如果未明确设置,则添加到“内容类型”标题。 spring.http.encoding.charset=UTF-8 #启用http编码支持。 spring.http.encoding.enabled=true #对HTTP请求和响应强制编码到已配置的字符集。 spring.http.encoding.force=true

来源:

我认为没有必要在application.properties文件中明确写入以下属性:

spring.http.encoding.charset=UTF-8

spring.http.encoding.enabled=true

spring.http.encoding.force=true

相反,如果您在应用程序中转到pom.xml,并且有以下内容,那么spring将完成所需的工作


我也更喜欢
应用程序.属性
配置。但是
spring.http.encoding
在新的spring引导版本(>2.3)中被删除。因此,新的application.setting应该如下所示:

<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>
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true

只需将其作为bean定义添加到您的配置中即可。我已尝试初始化javax.servlet.Filter,但它不起作用。可能重复,请参阅我用示例解决它。非常感谢!没错,使用属性是更好的选择。属性已移动到server.servlet.encoding.,spring.mvc。编解码器,见#18827。