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
相关产品推荐
相关产品推荐

