RedirectAttributes简介

本文介绍Spring MVC中使用RedirectAttributes实现重定向带参的两种方法:通过URL拼接参数和利用Flash属性隐藏参数。文章详细解释了两种方式的工作原理,并提供了具体的Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RedirectAttributes是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的
他有两种带参的方式:
第一种: 
attr.addAttribute("param", value);   
这种方式就相当于重定向之后,在url后面拼接参数,这样在重定向之后的页面或者控制器再去获取url后面的参数就可以了, 但这个方式因为是在url后面添加参数的方式,所以暴露了参数,有风险
例:
Java code
?
1
2
3
attr.addAttribute( "name" "123" );  
attr.addAttribute( "success" "success" );
return  "redirect:/index" ;

这样就相当于:return "redirect:/index?name=123&success=success"

第二种: 
attr.addFlashAttribute("param", value);
这种方式也能达到重新向带参,而且能隐藏参数,其原理就是放到session中,session在跳到页面后马上移除对象。所以你刷新一下后这个值就会丢掉
例:
Java code
?
1
2
3
attr.addFlashAttribute( "status" , "999" );
attr.addFlashAttribute( "message" , "登录失败" );
return  "redirect:/toLogin" ;

这种方式确实能重定向带参,但是有个问题,这个只能重定向到页面上,也就是说重定向的这个页面视图,能用el表达式直接获取你带参的值,比如status 和message ,都能获取。 

重定向到另一个Controller的时候,这个控制器里面如何获取这两个参数呢?

//因为OutputFlashMap和InputFlashMap  都是由FlashMapManager来管理的
        //对于每一次请求一个 “input” flash map 会被创建,来存储来自任何之前请求的
        //flash attribute 还有一个 “output” flash map 会被创建,来存储任何我们存储在这个请求中的,之后的请求参数
        //这里我获取getInputFlashMap,看看能不能获取到参数,但是还是map2直接为null
        Map<String, String> map2=(Map<String, String>)RequestContextUtils.getInputFlashMap(request);
        System.out.println(map2.get("status"));
        System.out.println(map2.get("message"));

   @RequestMapping("flash")
    public String flash(RedirectAttributes redirectAttributes) {
        redirectAttributes.addFlashAttribute("username", "Biao");
        return "redirect:flash2";
    }
 
    @RequestMapping("flash2")
    @ResponseBody
    public String flash2(@ModelAttribute("username") String username) {
        return "username: " + username;
    }

经试验证明,以上两种方式都能在Controller中获取到。


`RedirectAttributes` 是 Spring MVC 框架中的一个接口,用于重定向请求时传递数据。 通常情况下,当我们在一个处理器方法中处理完请求后,需要将结果数据传递给另一个处理器方法,然后再进行重定向。而 `RedirectAttributes` 就是为了方便在重定向时传递数据而设计的。 使用 `RedirectAttributes` 可以通过 `addAttribute()` 方法将数据添加到 URL 的查询参数中,或者通过 `addFlashAttribute()` 方法将数据存储到 Flash 作用域中。在重定向之后,这些数据可以在目标处理器方法中使用。 举个例子,以下代码演示了如何在一个处理器方法中使用 `RedirectAttributes` 进行重定向并传递数据: ```java @RequestMapping("/processForm") public String processForm(RedirectAttributes redirectAttributes) { // 处理请求... // 添加数据到 URL 的查询参数中 redirectAttributes.addAttribute("message", "Data has been processed successfully!"); // 添加数据到 Flash 作用域中 redirectAttributes.addFlashAttribute("status", "success"); return "redirect:/result"; } @RequestMapping("/result") public String showResult(@RequestParam("message") String message, Model model) { model.addAttribute("message", message); // 显示结果页面... return "result"; } ``` 在上面的例子中,`processForm()` 方法处理完请求后,通过 `redirectAttributes.addAttribute()` 方法将 "message" 参数添加到重定向 URL 的查询参数中,同时通过 `redirectAttributes.addFlashAttribute()` 方法将 "status" 属性存储到 Flash 作用域中。然后,返回 "redirect:/result" 实现重定向到 `/result` 请求。 在目标处理方法 `showResult()` 中,通过 `@RequestParam` 注解将 "message" 参数绑定到方法参数中,然后将其添加到模型中,最终在结果页面中显示。 这样,我们就可以在重定向请求中传递数据,并在目标处理方法中使用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值