带有 Tomcat UTF-8 编码的 Spring MVC

问题描述 投票:0回答:0

目前我正在尝试开始使用 Spring MVC。 我的编码有问题。 每次响应头是:

Content-Type: text/html;charset=ISO-8859-1
,所以所有非 ASCII 符号都是
?

我也尽量不使用任何配置文件,所有配置都是程序化的

我试过:

  1. 在我的
    CharacterEncodingFilter
    中添加
    ConfigDispatcherServletInitializer
@Override
protected Filter[] getServletFilters() {
   //if encoding has issues we need to add UTF-8 encoding filter
   CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
   encodingFilter.setForceEncoding(true);
   encodingFilter.setEncoding("UTF-8");
   //encoding filter must be the first one
   return new Filter[]{encodingFilter,
       new DelegatingFilterProxy("springSecurityFilterChain"),
    };
}

在我的

WebMvcConfigurer
中:
2.配置消息转换器

@Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
    }
  1. 添加消息转换器 bean
 @Bean
    public StringHttpMessageConverter stringHttpMessageConverter() {
        return new StringHttpMessageConverter(StandardCharsets.UTF_8);
    }
  1. 设置 thymeleaf ViewResolver 的编码
resolver.setCharacterEncoding("UTF-8");

在我的

WebSecurityConfigurerAdapter

5. 添加编码过滤器

http.addFilterBefore(new CharacterEncodingFilter("UTF-8", true, true), ChannelProcessingFilter.class);

我还尝试在我的 tomcat 运行配置中添加 VM 选项

-Dfile.encoding=UTF-8

对我来说没什么用,响应头字符集是

ISO-8859-1

All files encoding is

UTF-8
, Intellij Idea option "Default encoding for options file" 也是
UTF-8

maven 编译器编码属性:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

我所有的 html 文件都有这个用于编码的元标记行。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

tomcat版本为9.0.74,JDK为v11,spring版本为5.3.27

java http spring-mvc character-encoding tomcat9
© www.soinside.com 2019 - 2024. All rights reserved.