SpringBoot全局日期格式轉換失效問題記錄

SpringBoot全局日期格式轉換失效問題記錄

前言:

今天新搭建了一個項目, 像以前一樣在一個配置類上做了個全局字符串轉換日期對象的轉換器!

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> {
           .............
        };
    }
}
//-----------------
//或者使用官網提供的 通過註解`@JsonComponent`來聲明其靜態內部類,都沒生效!

但是發現失效了, 在debug模式下根本沒有進來,沒有任何反應! 後面發現原因在繼承了WebMvcConfigurationSupport配置類,導致自動配置失效!

在網上找到的原因, 如下圖所示:

tLmbnJ.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章