天天看點

SpringMVC如何接收前端傳遞的參數四種方式

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進行加密 是有必要的。(尤其是關鍵資料)      

繼續閱讀