SpringBoot的字符集配置类
org.springframework.boot.autoconfigure.http.HttpEncodingProperties
可配置属性
属性配置中默认为UTF8编码
SpringBoot中字符集AutoConfiguration类
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration
HttpEncodingAutoConfiguration配置了Bean
- CharacterEncodingFilter:根据字符集参数配置了过滤器处理字符集
- LocaleCharsetMappingsCustomizer:根据Local处理不同的字符集
具体实现设置字符集的类CharacterEncodingFilter
@Override
protected void doFilterInternal(
HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String encoding = getEncoding();
if (encoding != null) {
if (isForceRequestEncoding() || request.getCharacterEncoding() == null) {
request.setCharacterEncoding(encoding);
}
if (isForceResponseEncoding()) {
response.setCharacterEncoding(encoding);
}
}
filterChain.doFilter(request, response);
}
HttpMessageConverter
StringHttpMessageConverter是SpringMVC的消息转换器接口,用来处理请求报文到字符串和字符串到响应报文的转换器
private Charset getContentTypeCharset(@Nullable MediaType contentType) {
if (contentType != null && contentType.getCharset() != null) {
return contentType.getCharset();
}
else {
Charset charset = getDefaultCharset();
Assert.state(charset != null, "No default charset");
return charset;
}
}
StringHttpMessageConverter默认先根据ContentType中设置的字符集处理消息如果ContentType中没有设置字符集则使用StringHttpMessageConverter中定义的默认字符集。StringHttpMessageConverter默认定义的是ISO-8859-1字符集
需要其它字符集的自己配置StringHttpMessageConverter的Bean。
- SpringBoot中配置
StringHttpMessageConverter类
org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration
配置了StringHttpMessageConverter的字符集
@Bean
@ConditionalOnMissingBean
public StringHttpMessageConverter stringHttpMessageConverter() {
StringHttpMessageConverter converter = new StringHttpMessageConverter(
this.encodingProperties.getCharset());
converter.setWriteAcceptCharset(false);
return converter;
}