SpringBoot的字符集配置类

	org.springframework.boot.autoconfigure.http.HttpEncodingProperties

可配置属性
SprngBoot字符编码处理
属性配置中默认为UTF8编码

SpringBoot中字符集AutoConfiguration类

	org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration

HttpEncodingAutoConfiguration配置了Bean

  • CharacterEncodingFilter:根据字符集参数配置了过滤器处理字符集
  • LocaleCharsetMappingsCustomizer:根据Local处理不同的字符集
    SprngBoot字符编码处理

具体实现设置字符集的类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。
SprngBoot字符编码处理

  • 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;
		}

相关文章: