spring mvc重定向核心是返回“redirect:”前缀字符串,不经过视图解析器,触发浏览器新请求、地址栏变化,适用于防重复提交等场景;支持根路径(/user/list)、相对路径(../success.jsp)和绝对路径(https://example.com)三种写法,并可通过redirectattributes传递flash属性或url参数实现数据传递。

Spring MVC 中通过配置路径实现重定向,核心是使用 redirect: 前缀返回字符串,并配合路径写法控制跳转目标。它不走视图解析器,由浏览器发起新请求,地址栏会变化,适合表单提交后防重复、登录跳转等场景。
重定向路径的三种写法
重定向支持相对路径、根路径和绝对路径,写法直接影响最终访问地址:
-
根路径写法(最常用):以
/开头,表示从当前应用上下文路径开始,比如return "redirect:/user/list"→ 跳转到http://host:port/your-app/user/list -
相对路径写法:用
../或./,基于当前请求 URL 解析,例如当前请求是/admin/save,写return "redirect:../success.jsp"会跳到/admin/../success.jsp→ 即/success.jsp -
绝对路径写法:直接写完整 URL,如
return "redirect:https://www.example.com",可用于跳转外部站点
重定向到 Controller 方法而非页面
重定向不仅可以跳转 JSP 或 HTML 页面,还能跳转到另一个 Controller 的处理方法,实现逻辑解耦:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 写法示例:
return "redirect:/user/all",前提是该路径被某个@GetMapping("/user/all")方法映射 - 若 Controller 类上有
@RequestMapping("/api"),方法上是@PostMapping("/create"),则重定向应写为"redirect:/api/create" - 注意:不能写成
"redirect:/user/all.do"(除非显式配置了 .do 后缀映射),现代 Spring Boot 默认不依赖后缀
带参数的重定向方式
重定向本质是新请求,原始 request 数据丢失,需显式传递参数:
-
URL 查询参数:直接拼在路径后,如
return "redirect:/user/detail?id=" + userId,适合简单、非敏感数据 -
Flash 属性(推荐):用
RedirectAttributes存临时数据,自动绑定到下一次请求的 model 中:@PostMapping("/save")<br> public String save(User user, RedirectAttributes ra) {<br> ra.addFlashAttribute("msg", "添加成功");<br> ra.addAttribute("id", user.getId()); // 会变成 ?id=123<br> return "redirect:/user/detail";<br> }
目标方法中可直接用@ModelAttribute("msg")或 model 获取
与转发(forward)的关键区别
别混淆重定向和转发,二者行为完全不同:
- 重定向触发两次 HTTP 请求,地址栏变,request 作用域数据丢失;转发只一次请求,地址栏不变,model 和 request 属性可直接传递
- 重定向路径不经过视图解析器(不加前缀后缀),转发默认走视图解析器(如
return "success"→/WEB-INF/views/success.jsp) - 重定向能跳外部域名,转发只能在本应用内;转发可访问
/WEB-INF/下资源,重定向不可(404)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










