spring跨重定向传递数据
spring跨重定向传递数据
为何要重定向?
作用之一:防止表单重复提交
如何重定向?
// 在控制器方法返回的视图名称中,以redirect:开头的String不是用来查找视图的,而是用来指导浏览器进行重定向的路径
return "redirect:/spitter/" + spitter.getUsername();
重定向丢数据
显然,对于重定向来说,模型并不能用来传递数据。
重定向如何传递数据?
- 使用URL模板以路径变量和/或查询参数的形式传递数据;
- 通过flash属性发送数据;
通过URL模板进行重定向
通过连接String的方式:
@RequestMapping(value="/register", method=RequestMethod.POST)
public String processRegistration( @RequestPart("profilePicture") MultipartFile profilePicture, @Valid Spitter spitter,
Errors errors,HttpServletRequest http) throws Exception{
profilePicture.transferTo(new File("/data/spittr/" + profilePicture.getOriginalFilename()));
if(errors.hasErrors()) {
return "registerForm";
}
spitterRepository.save(spitter);return "redirect:/spitter/" + spitter.getUsername();
}
// 当构建url或sql查询语句的时候,使用String拼接不安全
模板方式:
@RequestMapping("/tiles")public String hello (Model model){model.addAttribute("name", "yangdong"); model.addAttribute("sex", "men");model.addAttribute("age", "18");return "redirect:/test/{name}";}
因为模型中的sex和age属性没有匹配重定向URL中的任何占位符,所以它会自动以查询参数的形式附加到重定向URL上。
结果得到的重定向URL路径将会是: test/yangdong?sex=men&age=18
小结:通过路径变量和查询参数的形式跨重定向传递数据是很简单直接的形式,但是它只能用来发送简单的值,例如String和数字的值。
使用flash属性
有个方案是将对象放到会话(session)中。会话能够长期存在,并且能够跨多个请求。所以我们能在重定向发送之前将对象放到会话中,并在重定向后,从会话中将其取出。当然,我们还要负责在重定向后再会话中将其清理掉。 实际上,Spring也认为将跨重定向存活的数据放到会话中是一个很不错的选择。但是,Spring认为我们并不需要管理这些数据,相反,Spring提供了将数据发送为flash属性的功能。按照定义,flash属性会一直携带这些数据直到下一次请求,然后才会消失。
@RequestMapping(value="/register", method=RequestMethod.POST)
public String processRegistration( @RequestPart("profilePicture") MultipartFile profilePicture, @Valid Spitter spitter,Errors errors,Model model) throws Exception{profilePicture.transferTo(new File("/data/spittr/" +profilePicture.getOriginalFilename()));if(errors.hasErrors()) {return "registerForm";}spitterRepository.save(spitter);model.addAttribute("username", spitter.getUsername());model.addAttribute("password",spitter.getPassword());return "redirect:/spitter/{username}";
}
转载于:https://www.cnblogs.com/heliusKing/p/10819907.html
spring跨重定向传递数据相关推荐
- WPF跨页面传递数据
WPF跨页面传递数据,如何在一个页面得到另个页面的数据,跨页面传递数据我觉得还是比较常用也比较重要的一个点,在传递数据的情况中无非就是A页面打开B页面把A页面的数据传递到B页面,或者就是A页面打开B页 ...
- JAVA跨线程传递数据方式总结
实现跨线程传递数据方式: v1:子线程使用主线程的局部变量 这种当主线程和子线程不在一快儿时就不适用.可以使用JDK原生的InheritableThreadLocal. v2:InheritableT ...
- SpringMVC跨重定向请求传递数据
(1)使用URL模板以路径变量和查询参数的形式传递数据(一些简单的数据) 1 @GetMapping("/home/index") 2 public String index(Mo ...
- 使用Cross-Page Postback(跨页面提交)在页面间传递数据
页面间传递数据的几种方法 在页面间传递数据时,我们有以下几种选择: 1.Query String 一个很常见的方法,Query String是URL中问号之后的那一部分.其优点在于它是轻量级的,不会给 ...
- Spring Boot中前后端传递数据方式
Spring Boot中前后端传递数据方式 postman作为客户端 目前前后端分离开发中用到的最流行的的参数格式是application/x-www-form-urlencoded和applicat ...
- 前台传递JSON数据,后台spring mvc如何接收数据
如何传递JSON数据到后台? 方式一, 使用post请求,请求类型为:application/x-www-form-urlencoded; charset=UTF-8 $.ajax({url : ur ...
- SpringMVC的学习(三)——Controller传递数据
一.Controller传递数据 有三种实现方案: 第一种:ModelAndView 第二种:Map 第三种:Model接口 ①:ModelAndView public class DemoContr ...
- html用vue传递数据,Vue组件及数据传递详解
本文我们就和大家详细介绍一下Vue系列(三):组件及数据传递.路由.单文件组件.vue-cli脚手架,希望能帮助到大家. 一. 组件component 1. 什么是组件?组件(Component)是 ...
- crt 运行时库dll跨模块传递crt对象,出现的崩溃问题
参考链接: https://blog.csdn.net/weixin_30653097/article/details/96512399 (讲述了,运行时库在启动的时候在exe或dll入口点之前就使用 ...
- gin.context 怎么在其他包中获取 只能传递吗_跨进程传递大图,你能想到哪些方案呢?...
面试官提了一个问题,我们来看看 小菜.阿宅 和 大神 三位同学的表现如何吧 小菜 自认为无所不知,水平已达应用开发天花板,目前月薪 10k 面试官:如何跨进程传递大图 小菜:很简单,把图片存到 SD ...
最新文章
- Apache ‘mod_pagespeed’模块跨站脚本漏洞
- LeetCode 94. Binary Tree Inorder Traversal--二叉树中序遍历--递归,迭代--C++,Python解法
- [引]VS2005 之 Visual Basic 程序的结构
- springboot urlresource_Spring Boot上传文件+部署到Tomcat
- 单片机实现水位控制C语言,单片机课程设计 水位自动控制.doc
- (android实战)创建查看试卷答案功能(类似于疯狂小鸟的选关)
- tensorflow.python.framework.tensor_shape.TensorShape 类
- 修改刷新没反应_【原神】全特产高效率采集线路和刷新时间
- java编写个倒计时_怎么编写一个倒计时java程序?求具体步骤!
- Hadoop 简介 及 安装
- Pug 介绍和在 Vue 中使用
- 面试问题总结——关于YOLO系列(二)
- 【python】输出列表元素,以空格/逗号为分隔符
- hbase 源代码解析(21) 自定义过滤器
- 计算机中有符号数为什么规定0为正,1为负?而且为了方便数值比较大小,甚至引入移码【就是在补码的基础上,符号位取反而已】。那么问题来了,为什么不一开始就规定1为正,0为负呢?
- 阅读nutch.Analysis.jj
- DLL依赖查看神奇CFF Explorer
- 快速跟踪查询快递的方法!
- 华钜同创:亚马逊Listing优化关联营销设置技巧
- oracle 1+2+3,vmware gsx server 3.2.1+as4 2.6.9-55.ELsmp+oracle 10g