Как изменить сериализацию/десериализацию по умолчанию для Java java.time.OffsetDateTime в Micronaut?

Я использую Micronaut v3.8.1. Micronaut использует Jackson для сериализации/десериализации через управление зависимостями Gradle:

implementation("io.micronaut.serde:micronaut-serde-jackson")

Сериализация по умолчанию для экземпляров java.time.OffsetDateTime — это число, представляющее миллисекунды с начала эпохи.

Например, возврат экземпляров класса, представленного следующим кодом (Kotlin), из контроллера:

import io.micronaut.serde.annotation.Serdeable
import java.time.OffsetDateTime

@Serdeable
class Thing(val created: OffsetDateTime)

... один экземпляр Thing будет сериализован во что-то вроде:

{
"created": 1674594085000
}

Я хочу изменить конфигурацию, чтобы создать строковое представление этой даты/времени, а именно:

{
"created": "2023-01-24T21:01:25.191493200Z"
}

Как этого добиться?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добавьте @JsonFormat (шаблон =)

Например:

@Serdeable
data class Thing(@field:JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSZ") val created: OffsetDateTime)

ОБНОВЛЕНИЕ: Глобальная настройка

micronaut:
  application:
    name: kotlinSerde
  serde:
    write-dates-as-timestamps: false # 1
#    date-format: 'yyyy-MM-dd' #2
  1. Если вы хотите использовать форматы ISO по умолчанию вместо временных меток (например: "2023-01-30T09:22:01.796846-05:00" vs :1675088195756)
  2. Если вы хотите установить определенный формат даты глобально.

Примечание: аннотация JsonFormat будет использоваться, если она объявлена.

Спасибо, ШингДжо. Это сработало хорошо, было бы здорово иметь для этого глобальную конфигурацию вместо добавления аннотации ко всем связанным полям.

Alexandre V. 28.01.2023 21:03

Обновлен ответ с примером глобальной настройки.

ShingJo 30.01.2023 15:38

ShingJo, глобальные настройки работают отлично, спасибо.

Alexandre V. 30.01.2023 18:21

Можете ли вы отметить этот вопрос как ответ? Удаляет это из моего списка дел.

ShingJo 31.01.2023 14:51

Другие вопросы по теме