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

Spring Boot中如何将Model对象的数据从View传递到Controller?

解决Spring Boot + Thymeleaf重定向传递Model数据的问题

因为重定向是客户端发起的全新HTTP请求,原请求中的Model数据不会自动携带到新请求中,针对你的场景,有以下几种可行的实现方式:

方式一:URL参数传递(最简单直接)

在test.html中,将message作为URL参数拼接到跳转链接里,让客户端发起请求时携带该参数:

<!-- test.html中的跳转按钮 -->
<a th:href="@{/submit(message=${message})}" class="btn">跳转到Submit页面</a>

然后在submit()方法中通过@RequestParam接收参数,并添加到当前请求的Model中:

@Controller
public class MyController {
 
    @GetMapping("/test")
    public String test(Model model) {
        model.addAttribute("message", "This is just a message");
        return "test";
    }
 
    @GetMapping("/submit")
    public String submit(@RequestParam("message") String message, Model model) {
        // 将接收到的参数存入当前Model,供submit.html使用
        model.addAttribute("message", message);
        return "submit";
    }
}

适用场景:数据内容简单、无需保密的场景,缺点是参数会暴露在浏览器地址栏中。

方式二:HttpSession存储(跨请求保留数据)

在test()方法中将message存入HttpSession,后续请求可从会话中读取:

@Controller
public class MyController {
 
    @GetMapping("/test")
    public String test(HttpSession session) {
        session.setAttribute("message", "This is just a message");
        return "test";
    }
 
    @GetMapping("/submit")
    public String submit(HttpSession session, Model model) {
        String message = (String) session.getAttribute("message");
        model.addAttribute("message", message);
        // 可选:用完后移除会话中的数据,避免长期占用
        session.removeAttribute("message");
        return "submit";
    }
}

test.html中的跳转按钮无需额外处理,直接指向/submit即可:

<a href="/submit" class="btn">跳转到Submit页面</a>

适用场景:需要跨多个请求保留数据的场景,注意如果会话未失效,数据会一直存在,需手动清理。

方式三:Flash属性(重定向专用,不暴露参数)

利用Spring的RedirectAttributes实现闪存属性,这类属性仅在重定向后的下一次请求中有效,之后自动清除,适合单次重定向且不想暴露参数的场景。

首先修改test.html,通过表单提交数据到中间控制器方法:

<!-- test.html中的表单 -->
<form th:action="@{/transfer-to-submit}" method="post">
    <input type="hidden" th:value="${message}" name="message">
    <button type="submit">跳转到Submit页面</button>
</form>

然后在控制器中添加中间方法,使用RedirectAttributes添加Flash属性并执行重定向:

@Controller
public class MyController {
 
    @GetMapping("/test")
    public String test(Model model) {
        model.addAttribute("message", "This is just a message");
        return "test";
    }

    @PostMapping("/transfer-to-submit")
    public String transferToSubmit(@RequestParam("message") String message, RedirectAttributes redirectAttributes) {
        // 添加Flash属性,会自动传递到重定向后的请求
        redirectAttributes.addFlashAttribute("message", message);
        return "redirect:/submit";
    }
 
    @GetMapping("/submit")
    public String submit(Model model) {
        // Flash属性已自动存入Model,直接使用即可
        String message = (String) model.getAttribute("message");
        return "submit";
    }
}

适用场景:需要隐藏参数、仅单次重定向传递数据的场景,不会在URL中暴露参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:37:06