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

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