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

Spring中LocalDate类型请求参数转换报错,调整后仍存问题

问题排查与解决方案

我一眼就看出问题所在了——你在日期格式化注解上用错了配置,这直接导致Spring无法正确解析你传入的纯日期参数!

核心错误分析

你给LocalDate类型的参数标注了@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME),但这个ISO格式对应的是带时间戳的完整日期时间字符串(比如2018-03-22T14:30:00),而你的请求参数是纯日期格式2018-03-22,完全不匹配。加上LocalDate本身只表示日期,不需要时间部分,所以这个注解配置完全不对。

修复步骤

1. 修正日期格式化注解

把@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)改成以下两种方式之一:

  • 方式一:用ISO标准日期格式(推荐,正好匹配你的参数格式)
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    
  • 方式二:直接指定日期格式字符串
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    

2. 移除多余的consumes属性

你的接口是GET请求,GET请求没有请求体,所以consumes = MediaType.APPLICATION_JSON_VALUE这个配置完全多余,甚至可能导致Spring对请求的解析逻辑出现异常,建议直接删掉。

修改后的完整代码

@RequestMapping(path = "reports/daily", method = RequestMethod.GET)
public String getDailyReport(
        @RequestParam("start_date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
        @RequestParam("end_date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) {

    double totalDistance = 0.0;
    double totalPrice = 0.0;
    List<Transit> transits = transitService.getTransits(startDate, endDate);

    for (Transit transit : transits) {
        if (transit.getDistance() != null && transit.getPrice() != null) {
            try {
                totalDistance += transit.getDistance();
                totalPrice += transit.getPrice();
            } catch (NullPointerException e) {
                // 这里注意:原代码的e.fillInStackTrace().getMessage()写法有问题,建议改成
                e.printStackTrace();
                // 或者用日志框架记录异常信息
            }
        }
    }

    return "Total distance " + totalDistance + ", total price: " + totalPrice;
}

额外排查点(如果修复后仍有问题)

  • 检查Spring Boot版本:确保你使用的Spring Boot版本是1.5及以上,这些版本原生支持Java 8的LocalDate等时间API,不需要额外配置转换器。
  • 清理冗余依赖:spring-boot-starter-web已经包含了Java 8时间格式化所需的所有依赖,如果你额外添加了类似jackson-datatype-jsr310的依赖,可能会出现版本冲突,建议检查pom.xml并移除重复依赖。

内容的提问来源于stack exchange,提问作者D.Zet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:45:46