Я использую 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"
}
Как этого добиться?
Добавьте @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
"2023-01-30T09:22:01.796846-05:00"
vs :1675088195756
)Примечание: аннотация JsonFormat
будет использоваться, если она объявлена.
Обновлен ответ с примером глобальной настройки.
ShingJo, глобальные настройки работают отлично, спасибо.
Можете ли вы отметить этот вопрос как ответ? Удаляет это из моего списка дел.
Спасибо, ШингДжо. Это сработало хорошо, было бы здорово иметь для этого глобальную конфигурацию вместо добавления аннотации ко всем связанным полям.