spring boot添加 LocalDateTime 等 java8 时间类序列化和反序列化的支持
由于项目将原有的 Date类型的字段改造为 LocalDate,LocalDateTime,LocalTime 类型, 发现 spring 对项目的时间格式无法自动转换,故需手动配置下。
在spring boot 中需在 maven 中引入 jsr-310 的支持
<dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId></dependency>
或者直接引用
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-json</artifactId>
</dependency>
因为 spring boot 是使用 jackson 作为 json 序列化和反序列化工具的,故只需配置 jackson 即可。
/*** 发布时间*/@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateDate;/*** 创建时间*/@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createDate;
全局配置
配置如下:
@Configuration
public class JacksonConfig {@Beanpublic ObjectMapper objectMapper(){ObjectMapper objectMapper = new ObjectMapper();objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_TIME_FORMAT)));javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_FORMAT)));javaTimeModule.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_TIME_FORMAT)));javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_TIME_FORMAT)));javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_FORMAT)));javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_TIME_FORMAT)));objectMapper.registerModule(javaTimeModule).registerModule(new ParameterNamesModule());return objectMapper;}}
public class Constants {/** 默认日期时间格式 */public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";/** 默认日期格式 */public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";/** 默认时间格式 */public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";}
然后只需要在实体类中对应的时间类型上使用 @DateTimeFormat 和 @JsonFormat 即可。
单个ObjectMapper
jsonStr = new String(msg);ObjectMapper objectMapper = new ObjectMapper();objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_TIME_FORMAT)));javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_FORMAT)));javaTimeModule.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_TIME_FORMAT)));javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_TIME_FORMAT)));javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_FORMAT)));javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_TIME_FORMAT)));objectMapper.registerModule(javaTimeModule).registerModule(new ParameterNamesModule());ComponentPublishedMessage message = objectMapper.readValue(jsonStr, ComponentPublishedMessage.class);
配置在属性上
@DateTimeFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ss.SSS")@JsonDeserialize(using = LocalDateTimeDeserializer.class)@JsonSerialize(using = LocalDateTimeSerializer.class)@JsonFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ss.SSS")private LocalDateTime createDate;
spring boot添加 LocalDateTime 等 java8 时间类序列化和反序列化的支持相关推荐
- java8 时间类API
前言 Instant LocalDate Clock SystemnanoTime 前言 (未完待续) 推荐一篇系统学习的java8时间类文章 我这里会介绍java8 新API中常用个类怎么用 应该是 ...
- Spring Boot 整合 SpringDataNeo4j 并封装工具类解析PathValue
Spring Boot 整合 SpringDataNeo4j 并封装工具类解析PathValue 一.Neo4j 二.Neo4j客户端浏览器 三.maven依赖 四.节点/关系映射 1.NodePer ...
- C# 实体类序列化与反序列化一 (XmlSerializer)
/// <summary>/// 实体类序列化的反序列化的类/// </summary>/// <typeparam name="T">< ...
- Spring Boot 添加拦截器的配置方式
在进行 Java Web 开发的时候我们经常会使用到过滤器,例如日志的记录.权限的验证等功能.以前使用 Spring MVC 的时候需要在 web.xml 中配置过滤器,现在使用 Spring Boo ...
- spring boot 添加mybatis,以及相关配置
首先在pom.xml文件里加入 <dependency><groupId>org.mybatis.spring.boot</groupId><artifact ...
- Spring Boot程序无法加载主类解决方法
平时在打包war包程序后,经当再次右击程序"Run As --> Spring Boot App"时,控制台有时候会出现"应用程序无法加载主类"的报错,解 ...
- Spring Boot下无法加载主类 org.apache.maven.wrapper.MavenWrapperMain问题解决
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 引言: 在SpringBoot中需要使用mvnw来做相关操作,但是却有时候会报出达不到MavenWr ...
- Spring Boot 2.2.0 正式发布,大幅性能提升 + Java 13 支持
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | DD小分队 来源 | didispace.com/spring-boot-2-2- ...
- Spring Boot 实践折腾记(10):响应式编程支持库Reactor
Spring Boot 2.0发布已经过去了2个多月,随着微服务的流行,Spring Boot也越来越受到青睐,更好的隔离编程范式得到了越来越多项目的应用,这是一件值得高兴的事. Spring Boo ...
最新文章
- 深度信念网络研究现状与展望
- android app功能 配置,配置安装时分发 | Android 开发者 | Android Developers
- influxDB和grafana
- python中color的用法_python - 如何为热图(使用plt.pcolor创建)中的NaN单元分配特定的颜色或图案,并使其显示在颜色栏中(图colorbar) - 堆栈内存溢出...
- #打开cmd指定路径_CMD
- 上海市计算机一级客观题,2012年上海市高校计算机等级考试(一级)模拟卷客观题...
- java if 顺序 括号_03-03 java 顺序语句结构,选择结构if语句
- Intellij IDEA+Tomcat+JRebel热部署
- paip.-Djava.library.path -Djava.ext.dirs= 的区别
- 合并两个有序数组的三种方法
- 透视投影中已知两平面的单应矩阵,能否求出这两平面的夹角?
- 五星大饭店完整剧情,五星大饭店(完整集数)在线观看
- 途家木鸟美团夏日折扣对垒,门槛低就一定香吗?
- serverlet总结
- 因果分析与关联分析的联系
- 计算机中毒症状简介,电脑中毒的八大表现,第五个大多数人都不知道!
- 数字化原住民|ONES 人物
- 编译原理三级项目PL/0的研究与改进
- USACO05JAN「Naptime」
- 中国智慧民航行业现状分析与前景规划咨询报告2022-2028年版