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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:30:58