SpringBoot controller之间相互转发 重定向传递参数


一:第一种不带参数跳转

  

  1.重定向 

    @RequestMapping("/AA")
    public String AA(){
        System.out.println("重定向到AA");
        return "redirect:/";
    }
    
    @RequestMapping("/BB")
    public String BB(){
        return "redirect:/AA";
    }

 

   2.转发

    @RequestMapping("/AA")
    public String AA(){
        System.out.println("转发到AA");
        return "forward:/";
    }

    @RequestMapping("/BB")
    public String BB(){
        return "forward:/AA";
    }

  

二:第二种带参数以拼接url地址的形式跳转

  1.重定向

    发现中文乱码,未解决,如果有了解的兄弟姐们下面评论一下。

    @RequestMapping("/AA")
    public String AA(String name){
        System.out.println("重定向到AA的name:"+name);
        return "redirect:/";
    }

    @RequestMapping("/BB")
    public String BB(){
        return "redirect:/AA?name="+"z周1";
    }

 

  2.转发

    中文不会像重定向那样乱码

    @RequestMapping("/")
    public String index(String name){
        System.out.println("转发到index的name:"+name);
        return "index";
    }

    @RequestMapping("/AA")
    public String AA(String name){
        System.out.println("转发到AA的name:"+name);
        return "forward:/";
    }

    @RequestMapping("/BB")
    public String BB(){
        return "forward:/AA?name="+"z周1";
    }

    根据转发的特性,index方法也可以接收到AA方法接收的传参。

         forward跳转,是请求转发,参数自动跳转,所以当http://localhost:8080/AA?name=z周1 该链接请求AA接口后 请求转发到index接口时,参数自动带过来了,index中name自动赋值为“z周1”,参数名称需一致,否则无法传参赋值。

  

  3.RedirectAttributes的addAttribute方法,本质还是拼接url。只能重定向,转发不行。 

    @RequestMapping("/AA")
    public String AA(String name){
        System.out.println("重定向到AA的name:"+name);
        return "redirect:/";
    }

    @RequestMapping("/BB")
    public String BB(RedirectAttributes attr){
        attr.addAttribute("name","z周1");
        return "redirect:/AA";
    }

 

  4.ModelAndView

    @RequestMapping("/AA")
    public String AA(String name){
        System.out.println("重定向到AA的name:"+name);
        return "basic";
    }

    @RequestMapping("/BB")
    public ModelAndView BB(Model model){
        ModelAndView modelAndView=new ModelAndView("redirect:/AA");
        modelAndView.addObject("name","z周1");
        return modelAndView;
    }

  

三:第三种带参数但不拼接参数跳转

 

  1.RedirectAttributes的addFlashAttribute方法,只能重定向,转发不行。这种方式就是将这个值放在了session中,所以参数不会在url的后面,如果刷新页面则值就没了!

 

@RequestMapping("/AA")
public String AA(@ModelAttribute("name") String name, Map<String,Object> map){
    System.out.println("重定向到AA的name:"+name);
    String name1 =(String) map.get("name");
    System.out.println("Map中的name:"+name1);
    System.out.println("重定向到AA的Map:"+map.toString());
    return "redirect:/";
}
@RequestMapping("/BB") 
public String BB(RedirectAttributes attr){ 
  attr.addFlashAttribute("name","z周1"); 
  return "redirect:/AA"; 
}

  

 

  关于是否可以使用model进行controller之间的传值,有人说可以有人说不行,我也未能找出可以运行的例子,如有大佬了解model传值,请评论一下,不胜感激。

 

四:转发和重定向的区别

       转发:一次请求,会在同一个url下处理请求,因此速度会更快,而且用户的变量和session会保持不变。

    重定向:两次请求,会重新发送url请求,响应速度会变慢,但是会重新初始化用户的变量和session。

 

参考链接:

  https://blog.csdn.net/qq_29347295/article/details/73920734

  https://blog.csdn.net/T_P_F/article/details/80078070

  https://blog.csdn.net/a355586533/article/details/49070441

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM