Spring中Thymeleaf锚点传多值到控制器报错求助
解决Thymeleaf传多参数到Spring控制器并通过@ModelAttribute接收的问题
报错含义说明
此应用程序没有针对/error的显式映射,因此你看到的是回退页面。
这个错误是因为请求路径或参数传递不符合控制器的映射规则,导致Spring找不到对应的处理方法,跳转到默认错误页。以下是具体修复步骤:
1. 修正Thymeleaf的URL参数写法
你当前的多参数写法有误,Thymeleaf中传递多个参数需放在同一个括号内,用逗号分隔:
<a th:href="@{/frontView(id1=${1}, id2=${2})}">Home</a>
2. 创建封装参数的实体类
要通过@ModelAttribute以对象形式接收参数,需先定义一个实体类来封装请求参数:
public class ViewParams { // 对应请求中的id1和id2参数 private Integer id1; private Integer id2; // 必须提供无参构造方法,Spring需要用它实例化对象 public ViewParams() {} // Getter和Setter方法,Spring通过Setter注入参数值 public Integer getId1() { return id1; } public void setId1(Integer id1) { this.id1 = id1; } public Integer getId2() { return id2; } public void setId2(Integer id2) { this.id2 = id2; } }
3. 修改控制器接收逻辑
你之前用@ModelAttribute Model m是错误的,Model是用来向视图传递数据的,不是接收请求参数的。正确写法是用@ModelAttribute绑定你定义的实体类:
@GetMapping("/frontView") public void frontView(@ModelAttribute ViewParams params) { // 通过实体类的Getter方法获取参数值 System.out.println("id1: " + params.getId1()); System.out.println("id2: " + params.getId2()); }
补充:无需实体类的接收方式
如果不想创建实体类,也可以直接用@RequestParam逐个接收参数:
@GetMapping("/frontView") public void frontView(@RequestParam Integer id1, @RequestParam Integer id2) { System.out.println("id1: " + id1); System.out.println("id2: " + id2); }
内容的提问来源于stack exchange,提问作者rookie
相关产品推荐
相关产品推荐

