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

Spring Boot 2.2升级至3.0后,String转LocalDateTime查询参数反序列化失败

解决Spring Boot 3.0升级后LocalDateTime查询参数反序列化异常问题

问题原因

Spring Boot 3.0基于Spring Framework 6,该版本移除了对Joda-Time库的内置转换支持,全面转向Java 8+原生的java.time API。错误日志明确显示框架尝试将字符串转为org.joda.time.LocalDateTime但找不到对应转换器;另外你的@DateTimeFormat注解中使用了YYYY(代表周年,而非自然年),这也可能引发日期解析异常。

解决方案

1. 替换Joda-Time类型为Java原生API

将QueryParams类中的org.joda.time.LocalDateTime替换为java.time.LocalDateTime,同时注意Spring Boot 3.0使用Jakarta EE API,校验注解需同步替换:

import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;

@Data
public class QueryParams {

    @NotBlank
    @DateTimeFormat(pattern = "yyyyMMddHHmmss")
    private LocalDateTime from;

    @NotBlank
    @DateTimeFormat(pattern = "yyyyMMddHHmmss")
    private LocalDateTime to;
}

2. 修正日期格式符

将YYYY改为yyyy:

  • YYYY:代表周年(基于周的年份,可能跨自然年)
  • yyyy:代表自然年,匹配你的参数格式需求

3. 清理冗余依赖(可选)

如果项目不再使用Joda-Time,直接移除相关Maven/Gradle依赖,避免类冲突。

若必须保留Joda-Time(不推荐)

如果因历史原因无法替换Joda-Time,需手动注册字符串到org.joda.time.LocalDateTime的转换器:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

@Configuration
public class JodaTimeConverterConfig {

    private static final DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyyMMddHHmmss");

    @Bean
    public Converter<String, LocalDateTime> stringToJodaLocalDateTimeConverter() {
        return source -> LocalDateTime.parse(source, FORMATTER);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:22:01