Jackson使用Spring Boot 2和Kotlin进行反序列化,无法构造'java.time.LocalDate'的实例`

Jackson使用Spring Boot 2和Kotlin进行反序列化,无法构造'java.time.LocalDate'的实例`,java,json,spring-boot,kotlin,jackson,Java,Json,Spring Boot,Kotlin,Jackson,我得到的错误提示是,我们讨论的是LocalDate,而不是LocalDateTime: com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造java.time.LocalDate的实例不存在与默认构造类似的创建者:没有要从字符串值“2012-03-12”反序列化的字符串参数构造函数/工厂方法 我一直在寻找这个问题,并尝试了其他答案中经常提到的技巧,例如我一直在一个接一个地尝试这些技巧,另外我还以不同的方式将它们结合起

我得到的错误提示是,我们讨论的是LocalDate,而不是LocalDateTime:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造java.time.LocalDate的实例不存在与默认构造类似的创建者:没有要从字符串值“2012-03-12”反序列化的字符串参数构造函数/工厂方法

我一直在寻找这个问题,并尝试了其他答案中经常提到的技巧,例如我一直在一个接一个地尝试这些技巧,另外我还以不同的方式将它们结合起来:

包括com.fasterxml.jackson.datatype:jackson-datatype-jsr310 通过bean注册模块,告诉Jackson ObjectMapper使用JavaTimeModule 尝试使用jackson模块kotlin 从不同的组合中尝试更多依赖项 在spring配置中将写入日期作为时间戳设置为false 将@JsonCreator构造函数添加到数据类 我的dto数据类如下所示:

数据类DateDto @JsonPropertydate @JsonDeserializeusing=LocalDateDeserializer::class @JsonSerializeusing=LocalDateSerializer::class @JsonFormatshape=JsonFormat.Shape.STRING,模式=yyyy-MM-dd val日期:LocalDate ; 然而,我没有运气玩这些把戏,我不明白我做错了什么


为什么这么难?我是否遗漏了一些非常明显的东西?我使用的是Spring Boot 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模块kotlin包括在内,如下所示:

    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-kotlin</artifactId>
    </dependency>

使用ObjectMapper和jackson模块kotlin似乎就足够了!不过,我还是喜欢一些关于序列化和Jackson的好资源/书籍。它如何在引擎盖下工作,以及如何在实践中与之关联。这是很多关于它的零碎信息。如果我发现了什么,我会编辑这个答案。

事实证明,第2步实际上解决了我的问题。我需要为ObjectMapper注册一个JavaTime模块。我一定是做错了什么事,没有早点完成这项工作

例如:

 var mapper = ObjectMapper() 
 .registerModule(KotlinModule())
 .registerModule(JavaTimeModule())

 mapper.readValue<DateDto>(message)
此外,不需要包括com.fasterxml.jackson.datatype:jackson-datatype-jsr310。您只需将jackson模块kotlin包括在内,如下所示:

    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-kotlin</artifactId>
    </dependency>

使用ObjectMapper和jackson模块kotlin似乎就足够了!不过,我还是喜欢一些关于序列化和Jackson的好资源/书籍。它如何在引擎盖下工作,以及如何在实践中与之关联。这是很多关于它的零碎信息。如果我发现了什么,我将编辑此答案。

这是否回答了您的问题?不幸的是,增加可见性没有什么区别。这是否回答了您的问题?不幸的是,添加可见性并没有什么区别