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

ObjectMapper转JSON时LocalDateTime字段未按指定格式输出问题

问题解决方案

问题根源

你使用的是Java 8引入的LocalDateTime时间类型,Jackson原生默认序列化规则仅支持旧版java.util.Date类,无法识别LocalDateTime的格式化配置,所以会出现你遇到的结构化对象输出问题,同时setDateFormat方法仅对java.util.Date生效,对LocalDateTime无效。

解决步骤

1. 引入Jackson JSR310时间处理模块

首先需要在项目中引入支持Java 8时间类型的Jackson模块:

  • Maven项目在pom.xml中添加依赖:
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>和你项目中jackson核心版本一致即可</version>
</dependency>
  • Gradle项目添加依赖:
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:你的jackson版本号'

2. 修正ObjectMapper配置

修改你初始化ObjectMapper的代码,注册时间模块并禁用时间戳序列化:

ObjectMapper objectMapper = new ObjectMapper();
// 注册Java8时间处理模块
objectMapper.registerModule(new JavaTimeModule());
// 禁用时间类型序列化为时间戳/结构化对象
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// 全局时间格式配置(如果字段上已加@JsonFormat注解,会优先使用字段配置)
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
objectMapper.setDateFormat(df);

String jsonList = objectMapper.writeValueAsString(userList);
System.out.println("userlog =>> " + jsonList);

3. 修正实体类注解错误

你当前在startDateTime、endDateTime的字段上添加了@JsonIgnore注解,该注解会导致Jackson序列化时直接忽略对应字段,即使get方法上有@JsonFormat注解也不会生效,需要删除字段上的@JsonIgnore注解。

修改完以上配置后,再次执行序列化即可输出你预期的格式化时间字符串。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:30:04