SpringMVC如何接收前端傳遞的參數四種方式
@RequestParam注解
@PathVariable注解
1.@RequestParam 擷取注解
1.get/post url =>"xx/user?id=1" action =>
public String User( @RequestParams(name="id") Long id ){
}。
2.@RequestParam定義的參數 會自動解析為 方法定義的類型。
@RequestParams(name="id") Long id )(通過postman模拟post請求)
1.@PathVariable擷取注解
1.get/post url =>"xx/user/1" action =>public String User( @PathVariable(name="id") Long id){}
2.@PathVariable必須通過正則指定對應的類型 隻有當url指定為數字,方法參數定義為數字類型才不會報錯。比如:(可以通過其他正則限制url,隻有符合條件的url才會映射到對應的action,否則不會找到對應的action)
@RequestMapping("/user/{id:\\d}")
public String User( @PathVariable(name="id") Long id){}
1.SpringMVC,可以不設定任何注解即可接收參數,比如
@GetMapping("/category")
public String category( Long id) {
System.out.println(id);
return "post/category";
}
可以通過 /category 通路 ,也可以通過 /category?id=1 通路
2.SpringMVC ,也可以自動包裝成對象
url /category?title=測試 或者 /category 都能通路到目标資源
@GetMapping("/category")
public String category( MPost post ) {
System.out.println(post.getTitle());
return "post/category";
}
1.@RequestBody 用來接收數組或者複雜對象(必須将參數放在requestbody中,放在url并不會被解析,哪怕請求方式是post)
2. url => /category requestbody =>{"id":1}
@PostMapping("/category")
public String category( @RequestBody Post post ) {
System.out.println(post.getTitle());
return "post/category";
}
3.若為對象數組,将方法參數改為 @RequestBody List<Post> post 即可
4.直接輸入 /category并不會找到對應的action
1.SpringMVC的自動封裝(不傳參也能進入)
@RequestParam(必須傳參,但可以手動設定為false)
@PathVariable(符合設定的正規表達式才允許進入,而且不能為空)
2.對比可知,主要是為了url提供更加嚴格的限制,以防止一些其他url進入該action。
3.提供複雜的接受參數的方式@RequestBody ,但必須将參數放置在@RequestBody中
4.針對PathVariable 需要注意的是參數中包含特殊字元的問題,可能導緻參數不全。
5.對于各種請求方式,驗證一下目前使用者,對url進行加密 是有必要的。(尤其是關鍵資料)