如何通过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
相关产品推荐
相关产品推荐

