@RequestParams前端
name 修飾當前形參的屬性
value 和name屬性同樣 也是修飾當前屬性
defaultValue 給屬性設置一個默認值
默認屬性 required 必備屬性
1. value:請求參數中的名稱
2. required:請求參數中是否必須提供此參數,默認值是true,必須提供 數據庫
前端:後端
<a href="/params/params?name=老王"> params獲取信息</a>
controllerrestful
@RequestMapping(value = "/params") public String params( String username){ // 若是咱們如今設置的形參和前端傳遞來的 參數名不一樣就會接受不到就會顯示null System.out.println(username); // null return "success"; }
上面就是傳遞來的參數和形參不一樣因此就會報錯cookie
咱們可使用指定的一個參數名以後 你傳遞任意的參數先用它來接受再傳遞給形參session
@RequestParam(value = "name")
controller : 這就是你全部的傳遞來的信息都會先被value接受而後再傳遞給username 這樣就不會出現信息不一樣 而且 value和name對應的是你的傳遞來的屬性的名字
@RequestMapping(value = "/params") public String params( @RequestParam(value = "name",required=false) String username){ // 若是咱們如今設置的形參和前端傳遞來的 參數名不一樣就會接受不到就會顯示null System.out.println(username); return "success"; }
defaultValue給傳遞來的屬性設置一個默認值app
public String def(@RequestParam(defaultValue ="隔壁老王") String username){ //給username設置一個默認值:隔壁老王
@RequestBody 獲取請求體中的key:valuepost
由於是獲取請求體中的信息全部 對於get請求不適用ui
既然是獲取請求體重的數據那麼只能是非get請求了url
前端:
<form action="/params/body" method="post"> User名字:<input name="username" /><br/> User密碼:<input name="u_password"/><br/> User日期:<input name="date"/><br/> <input type="submit" value="提交"/> </form>
controller
@RequestMapping(value = "body") public String body(@RequestBody String body){ //獲取請求體中的信息 System.out.println(body); return "success"; }
輸出是:
username=zy&u_password=321&date=2132
PathVariable
擁有綁定url中的佔位符 url中有/delete/{id},{id}就是佔位符
1. value:指定url中的佔位符名稱
1. 請求路徑同樣,能夠根據不一樣的請求方式去執行後臺的不一樣方法 2. restful風格的URL優勢
1. 結構清晰 2. 符合標準 3. 易於理解 4. 擴展方便
前端: 前端傳值就是直接/值 而不是值=信息
<a href="/params/pathvariable/3">pathvariable</a>
controller:
/** * @PathVariable註解 * @param id * @return */ @RequestMapping("/pathvariable/{id}") public String testPathVariable(@PathVariable(value = "id") String id){ System.out.println(id); return "success"; }
輸出的是就是你傳遞來的id的值
RequestHeader 獲取請求頭中的信息
由於是獲取請求頭中的信息那麼參數只能是用Accept來接收
前端:
<a href="/params/header">RequestHeader</a>
controller:
/** * RequestHeader註解 獲取請求頭中的信息 * @param header * @return */ @RequestMapping("/header") public String header(@RequestHeader(value = "Accept") String header){ //請求頭必選要Accept的信息來獲取 System.out.println(header); return "success"; }
CookieValue註解 獲取指定cookie名稱的值
由於你發送的cookie服務端的session必定會傳遞回來一個cookie對應的值 JESSIONID那麼咱們必須定義JESSIONID來接收 否則也會報錯
前端:
<a href="/params/cookie">CookieValue</a>
controller:
/** * 獲取指定的cookie信息 * @param cookie * @return */ @RequestMapping("/cookie") public String cookie(@CookieValue(value = "JSESSIONID") String cookie){ System.out.println(cookie); return "success"; }
出如今方法上:表示當前方法會在控制器方法執行前線執行。
出如今參數上:獲取指定的數據給參數賦值。
2. 應用場景
1. 當提交表單數據不是完整的實體數據時,保證沒有提交的字段使用數據庫原來的數據。
若是出如今方法上 加了ModelAttrbute註解的方法會優先其餘的方法來執行的
前端:
<form action="/params/model" method="post"> User名字:<input name="username" /><br/> User密碼:<input name="u_password"/><br/> User日期:<input name="date"/><br/> <input type="submit" value="提交"/> </form>
controller:
@RequestMapping("/model") public String model(){ System.out.println("我是model方法"); return "success"; } @ModelAttribute public void modelattribute(){ System.out.println("我是modelattribute"); }
輸出:
能夠看出 使用在方法中 ModelAttribute註解會優先其餘的方法先執行 咱們能夠在這一層中進行數據的過濾
修飾的方法有返回值:
@RequestMapping("/model") public String model(User user){ System.out.println(user); return "success"; } @ModelAttribute public User modelattribute(String username ){ User user = new User(); user.setUsername(username); user.setU_password("123"); user.setDate(new Date()); return user; }
輸入:
輸出:
User{username='zy', u_password='123232', date=Mon Mar 04 00:00:00 CST 2019}
修飾的方法沒有返回值就是要在第二次執行的方法中也要設置其接收值,在方法中先對接收的值進行設置 再對下面要執行的方法中進行值得設置
@ModelAttribute public void modelattribute(String username, Map<String,User>map){ User user = new User(); user.setUsername(username); user.setU_password("123"); user.setDate(new Date()); map.put("abc",user); //把信息放在abc中 } @RequestMapping("/model") public String model(@ModelAttribute(value = "abc") User user){ //經過ModelAttribute來接收其中map的值 System.out.println(user); return "success"; }
SessionAttributes 註解
1. 做用:用於屢次執行控制器方法間的參數共享
2. 屬性
1. value:指定存入屬性的名稱
這個方法是做用在類上的 因此咱們要在進入的類上進行引用
咱們以前再界面上獲取後端傳遞來的值都是經過model來獲取的 那麼咱們如今也能夠經過session來獲取信息
界面取值除了經過model.addAttribute渲染過來的一個一個取值以外還能夠經過requestScope來贊成進行取值
eg:
後端傳來三個值
model.addAttribute("username","root"); model.addAttribute("password","123"); model.addAttribute("age",20);
我能夠經過requestScope來統一取值
${requestScope.username}
這是request的取值 那麼咱們想要從session中取值就用sessionScope來取值
可是sessionScope必需要經過@SessionAttributes 註解來進行搭配使用否則是沒有值得
SessionAttributes就是把你方法中定義的參數給放到session中
類: @Controller @RequestMapping(path = "/params") @SessionAttributes(value = {"username","password","age"}) //這是把方法中的定義的參數給放在了 session中 前端就能夠經過session取值了 public class ParamsController { 方法: @RequestMapping("/session") public String session(Model model){ //經過model向界面傳遞數據 model.addAttribute("username","root"); model.addAttribute("password","123"); model.addAttribute("age",20); return "out"; }
既然咱們能夠經過session傳遞到界面值 那麼咱們也能夠經過SessionAttributes來獲取session中的信息
獲取信息就要經過ModelMap 來進行信息獲取了
@RequestMapping("/find") public String find(ModelMap modelMap){ // 經過modelMap去上面類設定的session中獲取數據 String name = (String)modelMap.get("username"); // 從session中獲取數據 String password = (String) modelMap.get("password"); Integer age = (Integer) modelMap.get("age"); System.out.println("username:"+name+":"+"passowrd"+password+":"+"age"+age); return "out"; }
咱們不單單能夠獲取數據還能夠刪除數據
SessionStatus 來設置setComplate來清空信息
清除信息:
@RequestMapping("/delete") public String delete(SessionStatus status){ status.setComplete(); //對全部的屬性進行 清空 return "success"; }
.