SpringBoot
全局日期格式轉換失效問題記錄
前言:
今天新搭建了一個項目, 像以前一樣在一個配置類上做了個全局字符串轉換日期對象的轉換器!
@Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> { ............. }; } } //----------------- //或者使用官網提供的 通過註解`@JsonComponent`來聲明其靜態內部類,都沒生效!
但是發現失效了, 在debug模式下根本沒有進來,沒有任何反應! 後面發現原因在繼承了
WebMvcConfigurationSupport
配置類,導致自動配置失效!在網上找到的原因, 如下圖所示:
自動配置在當
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