【问题标题】:Kotlin data class and LocalDateTimeKotlin 数据类和 LocalDateTime
【发布时间】:2018-11-10 16:23:03
【问题描述】:

我有 Ticket 类:

data class Ticket(
        var contact_email : String? = null,
        var date_opened : LocalDateTime? = null
)

但在读取字符串时出现错误:

原因: com.fasterxml.jackson.databind.exc.InvalidDefinitionException:不能 构造java.time.LocalDateTime 的实例(没有创作者,比如 默认构造,存在):无字符串参数构造函数/工厂 从字符串值('2017-11-13T06:40:00Z')反序列化的方法 [来源:未知;行:-1,列:-1](通过参考链: rnd_classifier.model.Ticket["date_opened"])

我尝试添加注释但没有成功:

data class Ticket(
        var contact_email : String? = null,

        @JsonSerialize(using = ToStringSerializer::class)
        @JsonDeserialize(using = LocalDateTimeDeserializer::class)
        var date_opened : LocalDateTime? = null
)

如何解决?

【问题讨论】:

    标签: kotlin jackson localdate data-class


    【解决方案1】:

    您的问题更多是关于 jackson 而不是 kotlin。 如serialize/deserialize java 8 java.time with Jackson JSON mapper中所述

    你需要添加一个额外的 gradle 依赖来解决它

    implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.5")
    

    之后它应该可以工作

    import com.fasterxml.jackson.databind.ObjectMapper
    import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
    import org.testng.annotations.Test
    import java.time.LocalDateTime
    
    class SoTest {
    
        data class Ticket(
                var contact_email: String? = null,
                var date_opened: LocalDateTime? = null
        )
    
        @Test
        fun checkSerialize() {
            val mapper = ObjectMapper()
            mapper.registerModule(JavaTimeModule())
            val ticket = mapper.readValue(inputJsonString, Ticket::class.java)
            assert ("$ticket"=="Ticket(contact_email=contact@ema.il, date_opened=2017-11-13T06:40)")
        }
    
        val inputJsonString = """{
            "contact_email": "contact@ema.il",
            "date_opened": "2017-11-13T06:40:00Z"
        }""".trimIndent()
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 2019-02-05
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      相关资源
      最近更新 更多