基于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自动配置失效