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