springboot如何重定向攜帶數據 RedirectAttributes

當controller層需要重定向到指定頁面時,如何攜帶數據?

  • 傳統使用session
  • 使用RedirectAttributes. (利用session原理)
  • 優點:提供瞭addFlashAttribute 等方法.確保數據隻能被使用一次後刪除

RedirectAttributes的使用

public interface RedirectAttributes extends Model {
    RedirectAttributes addAttribute(String var1, @Nullable Object var2);
    RedirectAttributes addAttribute(Object var1);
    RedirectAttributes addAllAttributes(Collection<?> var1);
    RedirectAttributes mergeAttributes(Map<String, ?> var1);
    RedirectAttributes addFlashAttribute(String var1, @Nullable Object var2);
    RedirectAttributes addFlashAttribute(Object var1);
    Map<String, ?> getFlashAttributes();
}
  • 直接在Controller的參數中添加RedirectAttributes.
  • addFlashAttribute會在重定向到下一個頁面取出這個數據以後,將session裡面的數據刪除\
  • addFlashAttribute 方法會將數據存儲在session中,訪問一次後失效
@PostMapping("/regist")
public String register(RedirectAttributes attribdatautes){
    int data = 1;
    attributes.addFlashAttribute("data",data);
    return "redirect:http://auth.gulimail.com/reg.html";
}
  • addAttribute 方法會將數據拼接在url後(get的形式)
@GetMapping("/addToCartSuccess.html")
    public String addToCartSuccessPagez(@RequestParam("skuId") Long skuId,Model model){
        CartItem cartItem = cartService.selectCartItemInfo(skuId);
        model.addAttribute("item",cartItem);
        return "success";
    }

RedirectAttributes存值後讀取不到

首先,檢查Controller上面是@Controller還是@RestController(兩者區別自行百度)

其次,如下

@GetMapping("/redirect")
public String redirect(RedirectAttributes redirectAttributes)
{
    redirectAttributes.addFlashAttribute("test", 1);
    return "redirect:/show";
}
 
@GetMapping("/show")
@ResponseBody
//必須要添加@ModelAttribute標簽,否側將讀不到值
//且必須指定變量名,並不會自動做匹配
public Map<String, Object> show(@ModelAttribute("test") int test)
{
    Map<String, Object> modelMap = new HashMap<>();
    modelMap.put("String", test);
    return modelMap;
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。 

推薦閱讀: