1. 程式人生 > >接受引數的幾個註解 請求引數@RequestParam 請求路徑@PathVariable

接受引數的幾個註解 請求引數@RequestParam 請求路徑@PathVariable

一、@RequestParam

請求引數@RequestParam

該接收引數名可以隨意,通過註解@RequestParam指明即可,nnn要與前臺保持一致,nnn1可隨便命名

(@RequestParam(value="nnn",required=false)String nnn1)

前端傳值時要在URL後面拼接 引數名+引數值

二、@PathVariable

請求路徑@PathVariable

@PathVariable String typeId

前端傳值時,不需要引數名,直接在URL後面拼接引數值即可,url/typeId

@PathVariable是用來獲得請求url中的動態引數的,所以該註解只能支援將引數放在請求url的GET提交方式,所以不管你如何進行設定,@PathVariable都是無法支援Post請求的。

三、@RequestBody

我們在開發過程中傳遞的物件只能是放在請求體中,所以只能通過Post提交方式來提交物件。所以我們在在傳遞物件的過程中,我們只能是通過@RequestBody這個註解來進行處理。

  轉自:https://blog.csdn.net/shine0112/article/details/72778518

  1、@requestBody註解常用來處理content-type不是預設的application/x-www-form-urlcoded編碼的內容,比如說:application/json或者是application/xml等。一般情況下來說常用其來處理application/json型別。

  2、

    通過@requestBody可以將請求體中的JSON字串繫結到相應的bean上,當然,也可以將其分別繫結到對應的字串上。
    例如說以下情況:
    $.ajax({
        url:"/login",
        type:"POST",
        data:'{"userName":"admin","pwd","admin123"}',
        content-type:"application/json charset=utf-8",
        success:function(data){
          alert("request success ! ");
        }
    });

    @requestMapping("/login")
    public void login(@requestBody String userName,@requestBody String pwd){
      System.out.println(userName+" :"+pwd);
    }
    這種情況是將JSON字串中的兩個變數的值分別賦予了兩個字串,但是呢假如我有一個User類,擁有如下欄位:
      String userName;
      String pwd;
    那麼上述引數可以改為以下形式:@requestBody User user 這種形式會將JSON字串中的值賦予user中對應的屬性上
    需要注意的是,JSON字串中的key必須對應user中的屬性名,否則是請求不過去的。

   3、

    在一些特殊情況@requestBody也可以用來處理content-type型別為application/x-www-form-urlcoded的內容,只不過這種方式

    不是很常用,在處理這類請求的時候,@requestBody會將處理結果放到一個MultiValueMap<String,String>中,這種情況一般在
    特殊情況下才會使用,

    例如jQuery easyUI的datagrid請求資料的時候需要使用到這種方式、小型專案只建立一個POJO類的話也可以使用這種接受方式

    4、

  @RequestBody接收的是一個Json物件的字串,而不是一個Json物件。然而在ajax請求往往傳的都是Json物件,後來發現用 JSON.stringify(data)的方式就能將物件變成字串。同時ajax請求的時候也要指定dataType: "json",contentType:"application/json" 這樣就可以輕易的將一個物件或者List傳到Java端,使用@RequestBody即可繫結物件或者List.

  

<script type="text/javascript">  
    $(document).ready(function(){  
        var saveDataAry=[];  
        var data1={"userName":"test","address":"gz"};  
        var data2={"userName":"ququ","address":"gr"};  
        saveDataAry.push(data1);  
        saveDataAry.push(data2);         
        $.ajax({ 
            type:"POST", 
            url:"user/saveUser", 
            dataType:"json",      
            contentType:"application/json",               
            data:JSON.stringify(saveData), 
            success:function(data){ 
                                       
            } 
         }); 
    });  
</script>
 @RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) 
    @ResponseBody  
    public void saveUser(@RequestBody List<User> users) { 
         userService.batchSave(users); 
    }