gpt4 book ai didi

java - 无法构造 java.time.LocalDateTime 的实例 - Jackson

转载 作者:行者123 更新时间:2023-12-02 20:21:16 26 4
gpt4 key购买 nike

我有两个 Spring Boot 应用程序,它们通过 JMS 消息传递和 ActiveMQ 进行通信。

一个应用程序向另一个应用程序发送一个包含 LocalDateTime 属性的对象。该对象被序列化为 JSON,以便发送到其他应用程序。

我面临的问题是 Jackson 在尝试将传入的 json 映射到我的对象时无法反序列化 LocalDateTime 属性。 LocalDateTime 属性到达“监听器应用程序”时具有以下格式:

"lastSeen":{
"nano":0,
"year":2019,
"monthValue":4,
"dayOfMonth":8,
"hour":15,
"minute":6,
"second":0,
"month":"APRIL",
"dayOfWeek":"MONDAY",
"dayOfYear":98,
"chronology":{
"id":"ISO",
"calendarType":"iso8601"
}
}

我得到的异常如下:

org.springframework.jms.support.converter.MessageConversionException:无法转换 JSON 消息内容;嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造 java.time.LocalDateTime 的实例

我可以使用以下注释暂时解决此问题:

@JsonSerialize(as = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class, as = LocalDateTime.class)
private LocalDateTime lastSeen;

但它们属于jackson datatype jsr310现在已已弃用

是否有任何方法/替代方案可以在不使用上述注释的情况下反序列化此 LocalDateTime 属性?或者我如何使用推荐的 jackson-modules-java8 让它工作?

最佳答案

我记得旧版本的 spring 没有这个问题(或者也许我很幸运)但这就是我在 Spring boot 2.1.7.RELEASE 中解决它的方法:

首先,添加Jackson's support modules为了支持 Java 8 功能(TimeDate API)

    <dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

然后在 Spring 中使用自定义配置注册默认的 ObjectMapper bean(以支持 Java 8)。

@Bean
@Primary
public ObjectMapper geObjMapper(){
return new ObjectMapper()
.registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule());
}

注意:@Primary 被用作一种预防措施,因此如果类路径上还有其他 ObjectsMapper bean,spring 将默认选择这个 bean。

关于java - 无法构造 java.time.LocalDateTime 的实例 - Jackson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54635551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com