SpringBoot升级2.7.2之后发现 前端接收的日期全部不对,application.yml配置的jackson不生效
网上查询解决方案都是集成WebMvcConfigurer重写extendMessageConverters方法;
但是发现并不生效;
确认自定义的FastJsonHttpMessageConverter 排序在最后,
根据消息转换器的应用规则,会顺序选择符合要求的消息转换器,
MappingJackson2HttpMessageConverter 在FastJsonHttpMessageConverter 之前,这样会使用MappingJackson2HttpMessageConverter 进行消息转换 ;
重写extendMessageConverters(),设置调用顺序,防止字符串被json格式化
@Slf4j
@Configuration
public class FastJsonMessageConvertConfig implements WebMvcConfigurer {
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters() {
//设置请求头
List<MediaType> mediaTypes = new ArrayList<>(16);
mediaTypes.add(MediaType.valueOf("application/json;charset=UTF-8"));
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
fastJsonHttpMessageConverter.setSupportedMediaTypes(mediaTypes);
//设置格式化规则
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
//设置字符格式
fastJsonHttpMessageConverter.setDefaultCharset(Charset.forName("UTF-8"));
return fastJsonHttpMessageConverter;
}
//保证StringHttpMessageConverter在FastJsonHttpMessageConverter前被调用
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.clear();
StringHttpMessageConverter converter = new StringHttpMessageConverter(
Charset.forName("UTF-8"));
converters.add(converter);
converters.add(fastJsonHttpMessageConverters());
}
}