Spring Jackson 序列化反序列化

@果酱  May 20, 2024

基于SpringBoot默认的Jackson对处理Json,要实现RequestBody反序列化,ResponseBody序列化,全局配置。

主要是反序列化输入难处理

方法一

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss 这个只对输出有效

方法二

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 输入输出都有效,但是不能全局作用

方法三

自定义ObjectMapper,测试对输出有效,无法反序列化输入

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 设置日期格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        objectMapper.setDateFormat(dateFormat);
        // 注册JSR310模块以支持Java 8时间类(如LocalDateTime)
        objectMapper.registerModule(new JavaTimeModule());
        // 禁用将日期写为时间戳的特性
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        return objectMapper;
    }

方法四

自定义 MappingJackson2HttpMessageConverter 配置,效果很好

@Configuration
public class JacksonConfig {
    @Bean
    public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        //设置日期格式
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleDateFormat smt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        objectMapper.setDateFormat(smt);
        mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
        return mappingJackson2HttpMessageConverter;
    }
}

另一种写法:在 WebMvcConfigurer 里重写 configureMessageConverters

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        // 设置日期格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        converter.getObjectMapper().setDateFormat(dateFormat);
        converters.add(converter);
    }
}

@EnableWebMvc,WebMvcConfigurationSupport,WebMvcConfigurer和WebMvcConfigurationAdapter区别
重写WebMvcConfigurationSupport后SpringBoot自动配置失效


添加新评论