Java 为使用RESTAPI映射日期的最佳选项
我需要使用Java/Spring(RestTemplate)使用RESTAPI。 在对Postman进行了一些冒烟测试之后,我看到dates字段具有这种结构Java 为使用RESTAPI映射日期的最佳选项,java,spring,resttemplate,Java,Spring,Resttemplate,我需要使用Java/Spring(RestTemplate)使用RESTAPI。 在对Postman进行了一些冒烟测试之后,我看到dates字段具有这种结构 "clipStartDate": { "__type": "Date", "iso": "2010-09-14T00:00:00.000Z" } 我尝试使用java.time.LocalDateTime在DTO中映射此字段。 但我得
"clipStartDate": {
"__type": "Date",
"iso": "2010-09-14T00:00:00.000Z"
}
我尝试使用java.time.LocalDateTime在DTO中映射此字段。
但我得到了一个序列化异常。(org.springframework.http.converter.httpmessagenoteradableexception:JSON解析错误:无法构造java.time.LocalDateTime
的实例)
这种情况下的最佳实践是什么?您应该使用
java.time.Instant
,它将正确映射。您问题中的格式是java.time.Instant
,因此将该字段定义为Instant
,它应该可以工作
在属性顶部添加@JsonDeserialize(使用=InstantDeserializer.class)
,如下所示:
@JsonDeserialize(using=InstantDeserializer.class)
private final Instant instant;
您看到的此错误意味着您的
ObjectMapper
配置不正确。在SpringBoot中,这是现成的自动配置,因此如果您使用SpringBoot2.2,此错误将消失
但是,如果出于某种原因您没有这种可能性,那么您需要配置一个带有名为JavaTimeModule
的附加模块的ObjectMapper
@Bean
public ObjectMapper objectMapper(){
return new ObjectMapper()
.registerModule(new JavaTimeModule());
}
这里有一个补充说明如何进一步定制
ObjectMapper
在这个网站上可能至少有100个关于这个主题的问答,你尝试过搜索一下吗?我看到了6年前的一篇文章,他们正在使用java.util.Date。我想知道是否可以使用Java时代的类。你试过了吗?它不起作用。I get=org.springframework.http.converter.httpMessageNodeTableException:JSON解析错误:无法反序列化java.util.Date
out-of-START\u对象令牌的实例;比如说你好。我得到了相同的异常org.springframework.http.converter.httpMessageEndableException:JSON解析错误:无法构造java.time.Instant
的实例(不存在与默认构造类似的创建者):无法从对象值反序列化(没有委托或基于属性的创建者);嵌套异常为com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造java.time.Instant
(不存在与默认构造类似的创建者):无法从对象值反序列化(无委托或基于属性的创建者)添加@jsondeseerialize(使用=InstantDeserializer.class)
在属性声明的顶部。您能否共享pom.xml的代码以及围绕ObjectMapper进行的任何配置?这将有助于更好地了解你的情况。我没有用Maven。这个项目正在使用Ant,如果还没有解决,你能分享Spring、Jackson和代码示例/一瞥等框架的版本吗?