Каков формат сериализации Jsonb по умолчанию для java объектов даты - PullRequest
0 голосов
/ 06 марта 2020

Какие форматы даты / времени использует jsonb по умолчанию для различных объектов даты java apis?

Например, javascript s new Date().toJSON() производит вывод, содержащий вторые дроби, которыми я был ожидая синтаксического анализа с помощью Jsonb в поле ZonedDateTime, но вторые дроби не поддерживаются сериализатором по умолчанию.

Нужно ли указывать пользовательский формат для сопоставления javascript Date?

1 Ответ

0 голосов
/ 06 марта 2020

Jsonb spe c определяет реализации отображения по умолчанию, которые должны поддерживаться в разделе 3.5 Дата:

Реализации ДОЛЖНЫ поддерживать привязку следующего стандартного Java дата / время классы:

  • java .util.Date
  • java .util.Calendar
  • java .util.GregorianCalendar
  • java .util.TimeZone
  • java .util.SimpleTimeZone
  • java .time.Instant
  • java .time.Duration
  • java .time.Period
  • java .time.LocalDate
  • java .time.LocalTime
  • java .time.LocalDateTime
  • java .time.ZonedDateTime
  • java .time.ZoneId
  • java .time.ZoneOffset
  • java .time.OffsetDateTime
  • java .time.OffsetTime

A В статье javaindeed перечислены различные используемые для них средства форматирования вместе с примером вывода:

{
  "date":               "2016-07-27T23:07:41",
  "calendar":           "2016-07-27T23:07:41.782+02:00[Europe/Copenhagen]",
  "gregorianCalendar":  "2016-07-27T23:07:41.801+02:00[Europe/Copenhagen]",
  "timeZone":           "Europe/Copenhagen",
  "simpleTimeZone":     "Europe/Paris",
  "instant":            "2016-07-27T21:07:41.806Z",
  "duration":           "PT96H",
  "period":             "P3M",
  "localDate":          "2016-07-27",
  "localTime":          "23:07:41.807",
  "localDateTime":      "2016-07-27T23:07:41.807",
  "zonedDateTime":      "2016-07-27T23:07:41.807+02:00[Europe/Copenhagen]",
  "zoneId":             "Europe/Copenhagen",
  "zoneOffset":         "+03:30",
  "offsetDateTime":     "2016-07-27T23:07:41.807+02:00",
  "offsetTime":         "23:07:41.807+02:00",
}

В моем случае экземпляр java.time.Instant будет десериализован правильно из javascript выходной строки Date.toJSON().

...