因為使用重定向的跳轉方式的情況下,跳轉到的地址無法獲取 request 中的值。 很好的解決了這個問題。 1. redirectAttributes.addAttributie("param", value); 這種方法相當於在重定向鏈接地址追加傳遞的參數。以上重定向的方法等同於 ,註意這種方法直接 ...
因為使用重定向的跳轉方式的情況下,跳轉到的地址無法獲取 request 中的值。RedirecAtrributes
很好的解決了這個問題。
1. redirectAttributes.addAttributie("param", value);
這種方法相當於在重定向鏈接地址追加傳遞的參數。以上重定向的方法等同於 return "redirect:/hello?param=value"
,註意這種方法直接將傳遞的參數暴露在鏈接地址上,非常的不安全,慎用。
2. redirectAttributes.addFlashAttributie("param", value);
這種方法是隱藏了參數,鏈接地址上不直接暴露,但是能且只能在重定向的 “頁面” 獲取 param 參數值。其原理就是將設置的屬性放到 session 中,session 中的屬性在跳到頁面後馬上銷毀。
註意:這種方式在頁面中可以正常獲取,但是跳轉目標是控制器方法的情況下,需要使用 @ModelAttribute
註解綁定參數後才能獲取。
package com.pudding.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Controller
public class RedirectController {
@RequestMapping("/set-flash-attribute")
public String setFlashAttribute(RedirectAttributes redirectAttribute) {
redirectAttribute.addFlashAttribute("username", "jack");
return "redirect:/user-information";
}
@RequestMapping("/user-information")
public String get(@ModelAttribute("username") String username) {
System.out.println(username);
return "/user-information";
}
}