SpringMVC-跨重定向请求传递数据

SpringMVC 跨重定向请求传递数据

我们知道, 重定向其实是两个请求, 而在第一次请求中的数据在第二次请求中出现的
那么如果我们需要重定向的功能而且希望第一次请求的数据能复制到下一次的请求中, 该如何实现呢?

  1. 通过在url中拼接参数

       return "redirect:/index?name=zhangsan&age=18"
      
         ````java
            //完整代码
               public class HelloController {
                  
                         @GetMapping("hello")
                                public String hello(){
                                           return "redirect:index?name=zhangsan&&age=18";
                                                  }
                                                     
                                                            @GetMapping("index")
                                                                   public String index(@RequestParam("name") String name, String age, Model model){
                                                                              System.out.println(name + "-" + "age");
                                                                                         return "index";
                                                                                                }
                                                                                                   }
                                                                                                      ````
                                                                                                      
                                                                                                         这样, 在重定向的下一次请求中我们就可以获取到name和age了
                                                                                                         
                                                                                                         2. 通过RedirectAttributes
    

RedirectAttributes是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的, 他有两种带参的方式:

  1. 第一种: **attr.addAttribute("name", "zhangshan");**  

  这种方式就**相当于重定向**之后,在url后面拼接参数,这样在重定向之后的页面或者控制器再去获取url后面的参数就可以了,但这个方式因为是在url后面添加参数的方式,所以**暴露了参数,有风险**
  
        ![](images/TIM截图20190712192040.png)
        
              ````java
                        @GetMapping("hello")
                                  public String hello(RedirectAttributes redirectAttributes){
                                                redirectAttributes.addAttribute("name", "zhangshang");
                                                              redirectAttributes.addAttribute("age", 18);
                                                                            return "redirect:index";
                                                                                      }
                                                                                            ````
                                                                                            
                                                                                               2. 第二种: **attr.addFlashAttribute("name", "zhangsna")**

  使用这种方式不会在URL后面追加参数
  
        ```java
                  @GetMapping("hello")
                            public String hello(RedirectAttributes redirectAttributes){
                                          redirectAttributes.addFlashAttribute("name", "zhangsan");
                                                        redirectAttributes.addFlashAttribute("age", "18");
                                                                      return "redirect:index";
                                                                                }
                                                                                          //使用@ModelAttribute来获取参数
                                                                                                  @GetMapping("index")
                                                                                                            public String index(@ModelAttribute String name, @ModelAttribute String age){
                                                                                                                          System.out.println(name + "-" + age);
                                                                                                                                        return "index";
                                                                                                                                                  }
                                                                                                                                                        ```
                                                                                                                                                        
                                                                                                                                                        最后我们都可以使用th:text标签在页面中取得这个值
                                                                                                                                                        
                                                                                                                                                        ````html
                                                                                                                                                        <h3 th:text="${name}"></h3>
                                                                                                                                                        <h3 th:text="${age}"></h3>
                                                                                                                                                        ````

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据