从 Spring Boot 2.4.x 更新到 2.5.x 后 Jackson 模块未注册
Jackson module not registered after update from Spring Boot 2.4.x to 2.5.x
将我的 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 引导的 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 对日期序列化和反序列化的原生支持。
这是
的副本
我认为我没有足够的声誉来标记它。
将我的 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 引导的 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 对日期序列化和反序列化的原生支持。
这是
我认为我没有足够的声誉来标记它。