在项目里我们往往会从前端传数据给后端,或者从后端传数据给前端,那么怎么在两个控制器之间传参输呢?
这里需要两个东西
1.RedirectAttributes:专门用于重定向之后还能带参数跳转的的工具类
第一种:
addAttribute(“param”, value);
这种方式就相当于重定向之后,在url后面拼接参数,这样在重定向之后的页面或者控制器再去获取url后面的参数就可以了,但这个方式因为是在url后面添加参数的方式,所以暴露了参数,有风险
例:
attr.addAttribute("name", "123");
attr.addAttribute("success", "success");
return "redirect:/index";
这样就相当于:return “redirect:/index?name=123&success=success”
第二种:
addFlashAttribute(“param”, value);
这种方式也能达到重新向带参,而且能隐藏参数,其原理就是放到session中,session在跳到页面后马上移除对象。所以你刷新一下后这个值就会丢掉
例:
attr.addFlashAttribute("status","999");
attr.addFlashAttribute("message","登录失败");
return "redirect:/toLogin";
详情推荐这篇博客:Spring MVC RedirectAttributes的用法解决办法_废弃的root的博客-CSDN博客_redirectattributes
2.@ModelAttribute
用法1:用在入参
运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用;
用在方法的入参上依次做如下操作:
- 从隐含对象中获取隐含的模型数据
- 将请求参数绑定到隐含对象中
- 将隐含对象传入到入参
- 将入参绑定到Model
用法2:用在方法上
被@ModelAttribute注释的方法会在此controller的每个方法执行前被执行 ,如果有返回值,则自动将该返回值加入到ModelMap中。因此对于一个controller映射多个URL的用法来说,要谨慎使用。我们编写控制器代码时,会将保存方法独立成一个控制器也是如此。
详情推荐这篇博客:@ModelAttribute运用详解_Hai-Yang-code的博客-CSDN博客_modelattribute
那么现在来实操一下:
例如我现在想从sso认证中心将token传给子系统system1
首先对于sso
采用addFlashAttributes将参数拼接到重定向的url中去
对于子系统System1
ModelAttribute根据token关键字读取token值