【问题标题】:Date object in JSON schemaJSON 模式中的日期对象
【发布时间】:2022-01-06 18:51:36
【问题描述】:

我有 createdAt 的 json 架构

{
  "title": "details",
  "definitions": {
    "dateTime": {
      "type": "string",
      "format": "date-time"
    },
  "properties" : {
    "createdAt": { "$ref": "#/definitions/dateTime" }
  }
}

当我尝试创建对象时

Details details = ImmutableDetails.builder()
         .createdAt(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
           .parse("2021-11-30T00:22:11.454Z"))
         .build(); 

我得到的错误是

createDate: [Nov 30, 2021, 0:22:11 AM] is not a valid date-time. 
Expected [yyyy-MM-dd'T'HH:mm:ssZ, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,9}Z, 
          yyyy-MM-dd'T'HH:mm:ss[+-]HH:mm, yyyy-MM-dd'T'HH:mm:ss.[0-9]{1,9}[+-]HH:mm] 

如何指定我的 JSON 架构以接受 java.util.Date 对象?

【问题讨论】:

  • 请尝试 new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ") 而不是 new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss .SSS'Z'")。 JSON 模式不喜欢日期时间结束时的 Z
  • 我无法使用 yyyy-MM-dd'T'HH:mm:ss.SSSZ 格式解析 2021-11-30T00:22:11.454Z
  • 我建议你不要使用SimpleDateFormat。这个类是出了名的麻烦和过时。我不知道该怎么做,因为我不知道您的 ImmutableDetails 及其生成器。但是请查看java.time, the modern Java date and time API
  • 一个minimal reproducible example,好吗?

标签: java json date jsonschema jsonschema2pojo


【解决方案1】:

JSON Schema 中的“日期-时间”格式遵循RFC3339。那是看起来像 2021-12-31T23:59:59Z2021-12-31T23:59:59-05:30 的时间戳,这正是错误消息所说的内容。

您已经开始使用正确格式的时间戳,然后将它们转换为不可接受的格式 - 所以只需删除该部分即可。

【讨论】:

  • 我的Details 类具有createdAt 类型的Date 字段。如果我删除转换,我无法将 String 传递给 Details Builder。
  • @Logic 我建议你不要使用Date。该类也设计不良且早已过时。使用现代 Java 日期和时间 API java.time 中的Instant。如果这需要将Instant 传递给您的构建器,请这样做:.createdAt(Instant.parse("2021-11-30T00:22:11.454Z"))。是的,就是这么简单。
猜你喜欢
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多