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

Spring XML应用中如何用ObjectMapper将LocalDate序列化为指定日期格式

解决Spring XML应用中LocalDate序列化格式问题

问题根源

你使用的SimpleDateFormat仅适配旧的java.util.Date类型,对Java 8引入的LocalDate完全不起作用。Jackson默认会序列化LocalDate的内部结构,导致输出冗余的日期字段详情。

解决方案

1. 引入Jackson Java 8日期模块

首先需要添加专门处理Java 8日期类型的依赖:

  • Maven依赖:
<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. 配置LocalDate序列化格式

有两种实现方式,可根据场景选择:

方式一:全局配置(Spring XML全局生效)

在Spring XML配置文件中定义ObjectMapper Bean,注册日期模块并指定格式:

<bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper">
    <!-- 注册Java 8日期模块 -->
    <property name="modules">
        <list>
            <bean class="com.fasterxml.jackson.datatype.jsr310.JavaTimeModule"/>
        </list>
    </property>
    <!-- 为LocalDate指定序列化格式 -->
    <property name="serializers">
        <map>
            <entry key="java.time.LocalDate">
                <bean class="com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer">
                    <constructor-arg>
                        <bean class="java.time.format.DateTimeFormatter">
                            <constructor-arg value="yyyy-MMM-dd"/>
                        </bean>
                    </constructor-arg>
                </bean>
            </entry>
        </map>
    </property>
</bean>

后续在需要序列化的组件中注入该objectMapper即可。

方式二:字段注解(局部生效)

如果仅需单个字段自定义格式,直接在Employee类的日期字段上添加注解:

import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDate;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
class Employee {
    private String firstName;
    private String lastName;
    private Long salary;
    @JsonFormat(pattern = "yyyy-MMM-dd")
    private LocalDate joiningDate;
}

同时确保ObjectMapper注册了日期模块:

// 修改MainDemo中的初始化代码
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());

String json = mapper.writeValueAsString(employee);
System.out.println(json);

3. 最终输出示例

修改完成后,序列化结果会变为:

{"firstName":"John","lastName":"Doe","salary":10000,"joiningDate":"2024-May-28"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:25:06