java - Jackson解析Json错误,转换为java.time.LocalDateTime时发生InvalidDefinitionException

标签 java json jackson date-format

使用 jackson 库将 json 字符串隐藏到 kotlin 对象

错误

Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalDateTime` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value ('2019-01-14T18:50:31.856+09:00')
 at [Source: (String)"{"name": "Kolineer", "age": "26", "messages" : ["message a","message b"],"transacted_at":"2019-01-14T18:50:31.856+09:00"}"; line: 1, column: 90] (through reference chain: com.test.utils.Person["transacted_at"])

这是代码

data class Person(val name: String, val age: Int, val messages: List<String>,
                  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
                  @JsonProperty("transacted_at")
                  val transactedAt: LocalDateTime )

fun main(args: Array<String>) {

    val json = """{"name": "Kolineer", "age": "26", "messages" : ["message a","message b"],"transacted_at":"2019-01-14T18:50:31.856+09:00"}"""
    val mapper = jacksonObjectMapper()
    mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, false);
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

    var person: Person = mapper.readValue<Person>(json)
    println(person)
}

最佳答案

要序列化/反序列化 Java 8 日期/时间类,您需要使用此 jackson 模块。

<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-jsr310</artifactId>
  <version>2.8.8</version>
</dependency>

要手动将此模块注册到 ObjectMapper,

ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();

注意:不了解 kotlin 语法,请将以上 java 代码转换为 kotlin。

关于java - Jackson解析Json错误,转换为java.time.LocalDateTime时发生InvalidDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55507629/

相关文章:

serialization - Spring Boot 问题使用 Jackson 序列化 java.time.LocalDateTime 以返回 ISO-8601 JSON 时间戳?

java - 使用 java.math.BigInteger.bitCount() 查找整数二进制表示法中 1 的个数

bash - Unix: “ls” 命令显示带有 ?延期后

java - 在 fragment 的 GridView 中显示从 Firebase 下载的图像在打开 fragment 时不断崩溃

java - 如何使用 Java 制作自由桌面应用程序

java - JSONException : End of input at character 0 故障排除

c# - 调用 tojson() 后创建 3 个 List<column>

java - Spring Boot Jackson 占用大量内存

javascript - 通过 JavaScript 映射 Json 数据

java - @ResponseBody 使用 ArrayLists 序列化错误