You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Micronaut中java.time.OffsetDateTime的默认序列化/反序列化规则

问题描述

我正在使用Micronaut v3.8.1,通过Gradle引入Jackson序列化依赖:

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

默认情况下,java.time.OffsetDateTime实例会被序列化为表示自Epoch以来毫秒数的数字。比如定义如下Kotlin类:

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

@Serdeable
class Thing(val created: OffsetDateTime)

返回的JSON结果类似:

{
"created": 1674594085000
}

希望修改配置,让OffsetDateTime序列化为ISO-8601格式的字符串,示例如下:

{
"created": "2023-01-24T21:01:25.191493200Z"
}
解决方案

方法一:全局配置(推荐)

在Micronaut的配置文件中添加Jackson序列化配置,对所有Java 8日期时间类型生效:

若使用application.yml

micronaut:
  serde:
    jackson:
      serialization:
        write-dates-as-timestamps: false

若使用application.properties

micronaut.serde.jackson.serialization.write-dates-as-timestamps=false

开启该配置后,OffsetDateTime会自动序列化为符合ISO-8601标准的字符串格式。

方法二:局部字段注解

如果仅需针对特定字段调整序列化格式,可以在字段上添加@JsonFormat注解:

import io.micronaut.serde.annotation.Serdeable
import com.fasterxml.jackson.annotation.JsonFormat
import java.time.OffsetDateTime

@Serdeable
class Thing(
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    val created: OffsetDateTime
)

如需自定义更精确的格式,可指定pattern参数:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSX")
val created: OffsetDateTime

内容的提问来源于stack exchange,提问作者Alexandre V.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:11:31