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

如何通过HTML a标签向Spring Controller传日期参数?HTTP 400错误解决

问题解决方法

出现HTTP 400错误的核心原因是Thymeleaf的静态占位符{start}和{end}无法自动获取输入框的实时值,导致请求参数未正确传递。以下是两种可行的解决方式:

方式一:用JavaScript动态拼接URL(推荐,适配用户动态输入)

这种方式能实时获取用户选择的日期,动态修改a标签的请求地址:

1. 修改HTML结构

保留输入框,调整a标签的基础href:

<input type="date" class="form-control" placeholder="" name="start" id="start" required>
<input type="date" class="form-control" placeholder="" name="end" id="end" required>
<a target="_blank" class="btn btn-info" id="search" href="/record/pdf">Print</a>

2. 添加JavaScript逻辑

监听a标签的点击事件,获取日期值并拼接参数:

document.getElementById('search').addEventListener('click', function(e) {
    const start = document.getElementById('start').value;
    const end = document.getElementById('end').value;

    // 校验日期是否填写完整
    if (!start || !end) {
        e.preventDefault();
        alert('请选择完整的日期范围');
        return;
    }

    // 编码参数并拼接URL
    this.href = `/record/pdf?start=${encodeURIComponent(start)}&end=${encodeURIComponent(end)}`;
});

方式二:检查Spring Controller参数接收配置

确保后端能正确解析日期参数,避免因格式不匹配导致400错误:

@GetMapping("/record/pdf")
public void generatePdf(
        @RequestParam("start") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate,
        @RequestParam("end") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate) {
    // 业务处理逻辑
}
  • 使用@DateTimeFormat指定日期格式为yyyy-MM-dd,和input date控件返回的格式保持一致;
  • 若项目配置了全局日期格式化规则,可省略该注解,但需确保规则匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:12:11