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

Spring Boot 3中自动反序列化LocalDateTime请求参数的正确方法

Spring Boot 3中LocalDateTime查询参数自动反序列化的规范方法

针对URL查询参数(如http://localhost:8080/test?from=20221001000000)的LocalDateTime自动反序列化,先明确你之前方案无效的原因:

  • @DateTimeFormat注解用了YYYY(基于周的年份)而非yyyy(公历年份),格式符错误导致解析失败;
  • @JsonDeserialize是Jackson处理JSON请求体的注解,对URL查询参数不生效——查询参数的类型转换由Spring MVC的Converter机制处理,和Jackson无关。

以下是官方推荐的有效方案:

方案1:修正@DateTimeFormat注解的格式符

这是局部参数配置的标准方式,直接在参数上使用正确格式的注解:

@RequestMapping("/test")
public String index(@DateTimeFormat(pattern = "yyyyMMddHHmmss") LocalDateTime from) {
    // 业务逻辑实现
    return "success";
}

注意必须用小写yyyy表示公历年份,大写YYYY仅用于周相关的年份计算,绝大多数业务场景下不适用。

方案2:全局配置Converter(推荐批量处理)

如果多个接口都需要处理相同格式的LocalDateTime查询参数,推荐全局注册Spring Converter,避免重复加注解:

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

@Configuration
public class DateTimeConverterConfig {

    @Bean
    public Converter<String, LocalDateTime> localDateTimeConverter() {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        return source -> LocalDateTime.parse(source, formatter);
    }
}

Spring Boot会自动识别并注册这个Converter,所有查询参数中String转LocalDateTime的场景都会使用该格式解析。

方案3:通过配置文件全局设置格式

利用Spring Boot的自动配置属性,在配置文件中统一定义日期时间格式:

application.properties

spring.mvc.format.datetime=yyyyMMddHHmmss

application.yml

spring:
  mvc:
    format:
      datetime: yyyyMMddHHmmss

此配置会统一设置Spring MVC处理LocalDateTime等日期时间类型的默认格式,无需额外代码修改。

异常原因说明

你遇到的MethodArgumentTypeMismatchException本质是@DateTimeFormat的格式符错误(YYYY),导致Spring无法将20221001000000正确解析为LocalDateTime,修正格式符后即可解决。

内容的提问来源于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.08 22:20:19