【问题标题】:Convert Java Date to Json Format将 Java 日期转换为 Json 格式
【发布时间】:2020-01-09 06:10:18
【问题描述】:

我在服务器上发布一个 Java 日期。 我遇到了这个异常。

.HttpMessageNotReadableException:JSON 解析错误:无法从字符串“1970 年 1 月 1 日凌晨 2:00:00”反序列化类型为 java.util.Date 的值:不是有效的表示(错误:无法解析日期值“1970 年 1 月 1 日”凌晨 2:00:00'

data class SyncTableBody<T>(val lastUpdatedDate: Date,
                            val inserted: List<T>,
                            val updated: List<T>,
                            val deleted: List<T>)

【问题讨论】:

  • 没有 JSON 日期格式。只有约定。 一个约定是使用完整的 ISO-8601 日期/时间字符串,例如:"2019-09-06T11:03:56.752Z"。另一个约定是在这样的标记字符串中使用毫秒以来的时间值:"/Date(1567767921626)/"。但在这两种情况下,你都必须设置你的序列化器/反序列化器来做到这一点,AFAIK 这不是自动的。
  • 较新的 java.time 类(如 LocalDate)默认提供标准 ISO 日期时间格式。

标签: json spring spring-boot kotlin retrofit2


【解决方案1】:

您可以尝试在日期中指定 JsonFormat,如下所示:

import com.fasterxml.jackson.annotation.JsonFormat;

data class SyncTableBody<T>(@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss") val lastUpdatedDate: Date,
                            val inserted: List<T>,
                            val updated: List<T>,
                            val deleted: List<T>)

【讨论】:

    【解决方案2】:

    我在改造调用中添加了这个日期格式化程序,现在我不再有这个错误了。

    val gson = GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create()
                val retrofit = Retrofit.Builder()
                        .baseUrl("http://10.0.2.2:8080/")
                        .addConverterFactory(GsonConverterFactory.create(gson))
                        .build()
    

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多