java - 从 Spring Boot 2.4.x 更新到 2.5.x 后 Jackson 模块未注册

标签 java spring-boot jackson

<分区>

将我的 spring-boot-starter-parent 版本从 2.4.8 更新到 2.5.4 后,在尝试反序列化 LocalDate 时,jackson 序列化开始出现此错误:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDate` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling

据我所知,这不应该发生(在以前的版本中也不会发生),因为 Spring Boot 默认具有这些 Jackson 依赖项(jackson-datatype-jdk8、jackson-datatype-jsr310 等)

我没有自定义 Jackson 配置。
Spring boot 2.5.x 版本有什么变化吗?

最佳答案

出现此问题是因为 JSON 本身没有日期格式,因此它将日期表示为字符串。

日期的字符串表示与内存中 LocalDate 类型的对象不同,因此我们需要一个外部反序列化器从字符串中读取该字段,并需要一个序列化器将日期呈现为字符串格式。

具有以下依赖性:-

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.11.0</version>
</dependency>

在实体级别使用 LocalDateDeserializer 和 JsonFormat 注释。

public class EntityWithDate{

    @JsonDeserialize(using = LocalDateDeserializer.class)
    @JsonSerialize(using = LocalDateSerializer.class)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
    public LocalDate operationDate;
}

还可以使用 Jackson 对日期序列化和反序列化的原生支持。

关于java - 从 Spring Boot 2.4.x 更新到 2.5.x 后 Jackson 模块未注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69191368/

相关文章:

java - 在 Spring Boot 应用程序中从 mongo db 获取数据,其中要获取的集合名称和字段在运行时已知

spring-boot - 在 spring boot 应用程序中启用 spring 框架的日志记录

java - 如何查看 org.codehaus.jackson 日志消息 - 使用 logging.properties

java - Spring配置@ResponseBody JSON格式

java - 使用Android发送网络图片

java - 轴2问题: WSHandler: Check Signature confirmation: stored SV vector not empty

Spring Boot : CORS Issue

java - 将 JSON 转换为 XML XmlMapper-Jackson 2.10

Java 编程 - SQL 语句应该存储在哪里?

java - 手动轮换 log4j 日志文件