自定义 Jackson 序列化、反序列化,支持 Java 8 日期新特性
ava 8 中,引入了新的时间和日期 API,相比较老旧的 Date
, 它使用起来更加便捷,用过的都懂。自定义 Spring Boot 内置的 JSON 框架 Jackson,让出入参支持序列化、反序列化 Java 8 中新的日期 API : LocalDateTime
、LocalDate
、LocalTime
默认情况下
Spring Boot默认已经为你配置了一个合理的ObjectMapper
实例。Spring Boot通过自动配置机制(Auto-configuration)来提供一个预配置好的ObjectMapper
,通常情况下已经足够满足大多数应用的需求。对于许多普通的Web应用来说,Spring Boot提供的默认配置已经足够满足需求,因此你可能并没有感觉到需要额外配置Jackson。Spring Boot会自动装配一个预配置的ObjectMapper
到你的应用中,你可以直接注入并使用。
自定义 Jackson 配置类
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
// 初始化一个 ObjectMapper 对象,用于自定义 Jackson 的行为
ObjectMapper objectMapper = new ObjectMapper();
// 忽略未知字段(前端有传入某个字段,但是后端未定义接受该字段值,则一律忽略掉)
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// JavaTimeModule 用于指定序列化和反序列化规则
JavaTimeModule javaTimeModule = new JavaTimeModule();
// 支持 LocalDateTime、LocalDate、LocalTime
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
objectMapper.registerModule(javaTimeModule);
// 设置时区
objectMapper.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
// 设置凡是为 null 的字段,返参中均不返回,请根据项目组约定是否开启
// objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
}
上述代码中,我们定义了一个 ObjectMapper
Bean,它用于自定义 Jackson
的行为,然后,通过 JavaTimeModule
添加了 LocalDateTime、LocalDate、LocalTime
的序列化、反序列化规则,搞定这些后,再设置时区、以及序列化中是否包含值为 null
的字段
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 自定义 Jackson 序列化、反序列化,支持 Java 8 日期新特性
发表评论 取消回复