[英]Cannot construct instance of `java.time.LocalDate` - Spring boot, elasticseach, jackson
[英]Jackson deserialization with Spring Boot 2 and Kotlin, Cannot construct instance of `java.time.LocalDate`
我收到此错误(请注意,我们谈论的是LocalDate ,而不是 LocalDateTime):
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of java.time.LocalDate
(no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value ('2012-03 -12')
我一直在寻找这个问题,并尝试了其他答案中经常提到的“技巧”,例如(我一直在尝试这些技巧中的一个,而且我一直在以不同的方式组合它们):
我的 dto 数据 class 如下所示:
data class DateDto (
@JsonProperty("date")
@JsonDeserialize(using = LocalDateDeserializer::class)
@JsonSerialize(using = LocalDateSerializer::class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
val date : LocalDate
);
但是,我对这些技巧没有运气,而且我不明白我做错了什么。
为什么这么难? 我错过了一些非常明显的东西吗? 我正在使用 Spring 引导 2.2.7、Kotlin 1.3.70、jackson-datatype-jsr310 2.11.1。
事实证明,第 2 步)实际上解决了我的问题。 我需要为 ObjectMapper 注册一个 JavaTime 模块。 我一定做错了什么,没有早点完成这项工作。
例如:
var mapper = ObjectMapper()
.registerModule(KotlinModule())
.registerModule(JavaTimeModule())
mapper.readValue<DateDto>(message)
此外,例如,不需要包含 com.fasterxml.jackson.datatype:jackson-datatype-jsr310。 您只需像这样包含 jackson-module-kotlin:
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
</dependency>
但是,使用 ObjectMapper 和 jackson-module-kotlin 似乎就足够了。 我想要一些关于序列化和 Jackson 的好资源/书籍,它是如何工作的。 以及如何在实践中与之相关。 这是很多关于它的零散信息。 如果我发现了什么,我会编辑这个答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.