千家信息网

SpringMVC如何重新定向redirect请求中携带数据方式

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,这篇文章给大家分享的是有关SpringMVC如何重新定向redirect请求中携带数据方式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SpringMVC 重新定向redi
千家信息网最后更新 2025年11月16日SpringMVC如何重新定向redirect请求中携带数据方式

这篇文章给大家分享的是有关SpringMVC如何重新定向redirect请求中携带数据方式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

SpringMVC 重新定向redirect请求中携带数据

  • 在控制器方法返回的视图名称中使用了redirect:前缀,这时返回的String不是用来寻找视图,而是浏览器进行跳转的路径:

return "redirect:/spitter/" + spitter.getUsername();

当一个控制器返回的是一个redirect时,原来的request会终止,并且会开启一个新的HTTP请求。原来request中所有的model数据都会清空。新的request不会有任何的model数据,如图:

现在不能再redirect时使用model来传递数据了。但是还有其他方法用来从重定向的方法中获取数据:

  • 将数据转换为路径参数或者查询参数

  • 在flash属性中发送数据首先来看一下Spring如何在路径参数或者查询参数中传递数据。

使用URL模版重定向

@RequestMapping(value="/register", method=POST)public String processRegistration(Spitter spitter, Model model) {    spitterRepository.save(spitter);    model.addAttribute("username", spitter.getUsername());    return "redirect:/spitter/{username}";}@RequestMapping(value = "/{username}", method = RequestMethod.GET)    public String showSpitterProfile(@PathVariable String username, Model model) {        System.out.println("showSpitterProfile");        Spitter spitter = spittleRepository.findByUsername(username);        model.addAttribute(spitter);        return "Profile";    }

model中其他的原始值也会作为查询参数添加到重定向URL中。例如,除了username,model同时也包括新建的Spitter对象的id属性:

@RequestMapping(value="/register", method=POST)public String processRegistration(Spitter spitter, Model model) {    spitterRepository.save(spitter);    model.addAttribute("username", spitter.getUsername());    model.addAttribute("spitterId", spitter.getId());    return "redirect:/spitter/{username}";}

但是由于model中的spitterId属性并没有映射到URL中的占位符,它会自动作为查询参数。

如果username是habuma,spitterId是42,那么返回的重定向路径将是/spitter/habuma?spitterId=42。

使用flash属性

Spring提供了通过RedirectAttributes来设置flash属性,RedirectAttributes作为Model的子接口,新增了一些方法用来设置flash属性。

@RequestMapping(value="/register", method=POST)public String processRegistration(Spitter spitter, RedirectAttributes model) {    spitterRepository.save(spitter);    model.addAttribute("username", spitter.getUsername());    model.addFlashAttribute("spitter", spitter);    return "redirect:/spitter/{username}";}

在重定向执行之前,所有的flash属性都会复制到会话中。在重定向后,存在会话中的flash属性会被取出,并从会话转移到模型之中。处理重定向的方法就能从模型中访问Spitter对象了,就像获取其他的模型对象一样

@RequestMapping(value = "/{username}", method = RequestMethod.GET)public String showSpitterProfile(@PathVariable("username") String username, Model model) {    if (!model.containsAttribute("spitter")) {        Spitter spitter = spitterRepository.findByUsername(username);        model.addAttribute(spitter);    }    return "profile";}

showSpitterProfile()方法所做的第一件事就是检查是否存有key为spitter的model属性。如果模型中包含spitter属性,那就什么都不用做了。这里面包含的Spitter对象将会传递到视图中进行渲染。但是如果模型中不包含spitter属性的话,那么showSpitterProfile()将会从Repository中查找Spitter,并将其存放到模型中。

重新定向显示数据

........<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>........username:
firstName:lastName:
email:....

SpringMVC 几种重定向携带数据方法

1.拼接字符串

return "redirect:/page/second?param1=lay¶m2=lay2";

2.采用RedirectAttribute来传参数

public String first(RedirectAttribute redirectAttribute){    redirectAttribute.addAttribute("param1", "lay");    return "redirect:/page/second";}

3.RedirectAttribute--addFlashAttribute()的用法

@Controller@RequestMapping("/page")public class redirectDemo{    @RequestMapping("/first")    public String first(RedirectAttribute redirectAttribute){        redirectAttribute.addFlashAttibute("param1", "lay");        return "redirect:/page/second";    }    @RequestMapping("/second")    public String second(@ModelAttribute("param1") String param1){        System.out.println(param1);        return "second";    }}

感谢各位的阅读!关于"SpringMVC如何重新定向redirect请求中携带数据方式"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

数据 属性 参数 方法 模型 对象 路径 查询 视图 方式 内容 控制器 更多 篇文章 控制 不错 原始 实用 之中 前缀 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中医中药数据库生物谷 手机 服务器文件管理 红石最强的我的世界服务器 软件开发代洗 网络技术女生毕业找工作 移动网无法连接游戏服务器 中科大网络安全专业 数据库的实例id 广州服务软件开发定制 海淀区什么是软件开发不二之选 深圳好的网络安全培训机构 蔡甸哪里有软件开发企业 迅雷代理服务器ip 网络安全周临武 慧鼎服务器路径是什么原因 17年三级网络技术真题 软件开发和服务工程哪个好 怎样拷贝数据库文件夹里 大部分软件开发公司前后端比 网络安全防护设备招投标文件 软考中级选择数据库好过么 dnf70版本服务器 广德进口软件开发服务代理品牌 谷数数据库驱动 数据库一对一怎么转换关系模式 车厘子互联网络科技有限公司 安全学院服务器找不到页面 鸿威软件开发有限公司 i c卡管理系统连不上服务器 软件开发团队晨会开场白
0