SpringBoot
全局日期格式转换失效问题记录
前言:
今天新搭建了一个项目, 像以前一样在一个配置类上做了个全局字符串转换日期对象的转换器!
@Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> { ............. }; } } //----------------- //或者使用官网提供的 通过注解`@JsonComponent`来声明其静态内部类,都没生效!
但是发现失效了, 在debug模式下根本没有进来,没有任何反应! 后面发现原因在继承了
WebMvcConfigurationSupport
配置类,导致自动配置失效!在网上找到的原因, 如下图所示:
![tLmbnJ.png](https://i-blog.csdnimg.cn/blog_migrate/bf0315c98d0cc90b07b395018c19dede.png)
自动配置在当
WebMvcConfigurationSupport
类不存在的时候才会生效WebMvc自动化配置,WebMvc自动配置类中不仅定义了classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/等路径的映射,还定义了配置文件spring.mvc开头的配置信息等。
类路径上的 HttpMessageConverter 失效
解决方案
是在自己继承了
WebMvcConfigurationSupport
上配置转换器:
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* 解决继承WebMvcConfigurationSupport,静态资源访问不到
*
* @param registry
* @author: ZhiHao
* @date: 2020/6/11
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
super.addResourceHandlers(registry);
}
/**
* 解决继承WebMvcConfigurationSupport, json方式全局日期反序列化失效
*
* @param converters
* @author: ZhiHao
* @date: 2020/6/11
*/
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
return DateConverterConfig.parse(jsonParser.getText());
}
});
objectMapper.registerModule(module);
converter.setObjectMapper(objectMapper);
converters.add(converter);
super.configureMessageConverters(converters);
}
/**
* 解决继承WebMvcConfigurationSupport, 普通请求,String转换Date-转换器
*
* @param registry
* @author: ZhiHao
* @date: 2020/6/11
*/
@Override
protected void addFormatters(FormatterRegistry registry) {
registry.addConverter(new DateConverterConfig());
}
}
1