You need to enable JavaScript to run this app. Spring Boot中LocalDate序列化失效 @JsonFormat注解不生效问题
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中LocalDate序列化失效 @JsonFormat注解不生效问题

Spring Boot RestController LocalDate日期反序列化失败解决方案

核心问题原因

你当前代码报错的核心原因是:显式指定了无参的LocalDateDeserializer反序列化器,该序列化器默认使用yyyy-MM-dd格式解析日期,会忽略你字段上标注的@JsonFormat自定义格式规则。你传入的日期字符串08-06-1993以日期开头,不符合默认年开头的解析规则,所以直接在索引0位置抛出解析异常。


可用解决方案

方案1:删除冗余的序列化/反序列化器注解(最推荐)

只保留@JsonFormat注解即可,只要项目引入了JSR310时间处理模块,Jackson会自动识别注解上的格式完成解析,修改后实体类字段代码如下:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
private LocalDate dob;

如果是较低版本的Spring Boot项目缺失JSR310依赖,在pom.xml中添加以下依赖即可(Spring Boot 2.x+版本默认已经集成,无需手动添加):

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

方案2:自定义指定格式的反序列化器

如果你需要显式指定反序列化器,需要自定义实现对应格式的反序列化类:

public class CustomLocalDateDeserializer extends LocalDateDeserializer {
    public CustomLocalDateDeserializer() {
        super(DateTimeFormatter.ofPattern("dd-MM-yyyy"));
    }
}

然后在字段上替换原有的反序列化器配置:

@JsonDeserialize(using = CustomLocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
private LocalDate dob;

方案3:全局配置日期解析规则

如果全项目都是统一的dd-MM-yyyy日期格式,可以直接配置全局规则,无需每个字段加注解:

@Configuration
public class JacksonConfig {
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder
                .serializerByType(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("dd-MM-yyyy")))
                .deserializerByType(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("dd-MM-yyyy")));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 20:51:00