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

Micronaut控制器中配置LocalDateTime的JSON返回格式方案咨询

问题描述

环境信息

  • Micronaut: 3.7.3
  • Java: OpenJDK 11.0.16
  • Groovy: 3.0.13

控制器代码

@Controller("/")
@Slf4j
class Controller1 {
    @Get(uri="/test-localdatetime", produces = MediaType.APPLICATION_JSON)
    HttpResponse<String> testLocalDateTime() {
        LocalDateTime now = LocalDateTime.now()
        def map = [
                status: "SSUCCESS",
                time: now
        ]
        return HttpResponse.ok(map)
    }
}

当前接口返回格式

{"status":"SSUCCESS","time":[2022,11,2,8,24,13,948454300]}

使用JsonBuilder后的返回格式

{
    "status": "SSUCCESS",
    "time": {
        "month": "NOVEMBER",
        "second": 29,
        "hour": 8,
        "nano": 944749300,
        "year": 2022,
        "dayOfMonth": 2,
        "minute": 44,
        "monthValue": 11,
        "dayOfWeek": "WEDNESDAY",
        "chronology": {
            "calendarType": "iso8601",
            "id": "ISO"
        },
        "dayOfYear": 306
    }
}

期望返回格式

{
  "status":"SSUCCESS",
  "time":"2022-11-02 08:24:13"
}

是否可以通过添加配置或注解的方式,无需修改初始控制器代码,实现上述期望的JSON返回格式?


解决方案

可以,无需修改控制器代码,通过配置Jackson全局序列化规则即可实现,步骤如下:

1. 添加全局日期格式化配置

在项目的src/main/resources/application.yml(或application.properties)中添加以下配置,指定日期序列化的格式:

YAML格式:

micronaut:
  jackson:
    serialization:
      write-dates-as-timestamps: false
    date-format: "yyyy-MM-dd HH:mm:ss"

Properties格式:

micronaut.jackson.serialization.write-dates-as-timestamps=false
micronaut.jackson.date-format=yyyy-MM-dd HH:mm:ss

2. 验证效果

重启应用后调用/test-localdatetime接口,返回的time字段会自动格式化为yyyy-MM-dd HH:mm:ss格式的字符串,与期望格式一致。

如果需要针对特定日期类型做更精细的格式化控制,也可以自定义Jackson模块并注册到Micronaut中,但上述全局配置已经能满足当前需求。

内容的提问来源于stack exchange,提问作者wureka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:25:16