Jackson无法将LocalDateTime序列化成字符串的解决办法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jackson无法将LocalDateTime序列化成字符串的解决办法相关的知识,希望对你有一定的参考价值。
1.情景展示
在web开发过程中,如果使用的是SpringBoot框架的话, 我们通常使用在前后端数据交互的时候,我们通常会涉及到日期类型的转换。
当我们需要将日期类型转换成字符串响应给前端时,只需要一个注解@JsonFormat就可以搞定
这样,前端接收到的将是2021-03-17 16:51:51格式的日期格式字符串,根本无需我们手动将日期转字符串。
使用@JsonFormat,进行手动序列化时,会不会出问题呢?
2.原因分析
前后端交互,使用@JsonFormat可以解决日期问题,但是,在实际开发过程中,往往我们服务器对服务器,这样一来@JsonFormat就失效了。
下面,我们来测试一下吧:
即:它只能使用于前后端交互,具体原理我不清楚。
3.解决方案
既然@JsonFormat不能用,那我们只能另想办法了
通过修改ObjectMapper日期序列化格式来实现
导包
<!--日期类进行序列化时,指定格式-->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.11.3</version>
</dependency>
代码实现
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/*
* 将包含LocalDateTime类型的属性进行序列化时转成时间字符串
* @description: 通过Jackson实现
* @attention: 如果自定义key名称的话,通过添加注解@JsonProperty来实现
* @date: 2021-03-17 15:42
* @param: bean
* @return: java.lang.String json字符串
* 生成的日期格式:yyyy-MM-dd HH:mm:ss
*/
public static String fromBeanWithLocalDateTime(Object bean)
if (null == bean) return "";
String jsonStr = "";
try
ObjectMapper mapper = new ObjectMapper();
// 初始化JavaTimeModule
JavaTimeModule timeModule = new JavaTimeModule();
// 设置LocalDateTime的序列化格式
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));
mapper.registerModule(timeModule);
jsonStr = mapper.writeValueAsString(bean);
catch (JsonProcessingException e)
log.error("JavaBean-->json字符串转换失败:" + e.getMessage());
return "";
log.debug("JavaBean转json字符串前:\\n" + bean.toString());
log.debug("JavaBean转json字符串后:\\n" + jsonStr);
return jsonStr;
效果展示:
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
作者:Marydon
以上是关于Jackson无法将LocalDateTime序列化成字符串的解决办法的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 问题使用 Jackson 序列化 java.time.LocalDateTime 以返回 ISO-8601 JSON 时间戳?
使用 Jackson JSR310 模块反序列化 LocalDateTime
Spring boot + Jackson + LocalDateTime:日期解析不正确
使用 Spring Boot 2 和 Kotlin 进行 Jackson 反序列化,无法构造 `java.time.LocalDate` 的实例
自定义SpringBoot对于LocalDate/LocalDateTime/LocalTime类型序列化和反序列化的几种方式
自定义SpringBoot对于LocalDate/LocalDateTime/LocalTime类型序列化和反序列化的几种方式