接受引數的幾個註解 請求引數@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); }