1 通過json獲取參數
通過瀏覽器的url為后端控制層函數賦值,通過注解@responseBody 將java對象轉換為json格式的數據返回給前端頁面。
@ResponseBody注解的作用是將controller的方法返回的對象通過適當的轉換器轉換為指定的格式之后,寫入到response對象的body區,通常用來返回JSON數據或者是XML數據。一般在異步獲取數據時使用【也就是AJAX】。
后端Controller層代碼如下:
@RequestMapping("/param")
@ResponseBody
public Map<String,Object> demo1(String name,int age){
Map<String,Object> paramMap=new HashMap<String,Object>();
paramMap.put("name",name);
paramMap.put("age",age);
return paramMap;
}
前端瀏覽器請求為:
http://localhost:8080/param?name=zhangsan&age=14
之后前端返回的Json數據為:
{“name”:zhangsan,“age”:14}
2 請求路徑參數@PathVariable
獲取路徑參數。即前端瀏覽器發起url/{id}請求的這種形式。
后端Controller層代碼如下:
@RequestMapping("/param/{name}/{age}")
@ResponseBody
public Map<String,Object> demo2(@PathVariable("name") String name , @pathVariable("age") int age){
Map<String,Object> paramMap=new HashMap<String,Object>();
paramMap.put("name",name);
paramMap.put("age",age);
return paramMap;
}
其中@PathVariable(value = “name”, required = false)中有value和required兩個參數,第一個即為指定傳遞的參數,第二個為該參數是否必須,若為false則可以在前端不傳入該參數,默認為null空值。
3 @RequestParam的使用
使用@RequestParm用於綁定controller上的參數,可以是多個參數,也可以是一個Map集合,GET,POST均可;
語法:@RequestParam(value=”參數名”,required=”true/false”,defaultValue=””)
value:參數名
required:是否包含該參數,默認為true,表示該請求路徑中必須包含該參數,如果不包含就報錯。
defaultValue:默認參數值,如果設置了該值,required=true將失效,自動為false,如果沒有傳該參數,就使用默認值
@RequestMapping("/param/{name}/{age}")
@ResponseBody
public Map<String,Object> demo2(@RequestParam("name") String name , @RequestParam("age") int age){
Map<String,Object> paramMap=new HashMap<String,Object>();
paramMap.put("name",name);
paramMap.put("age",age);
return paramMap;
}
@RequestParam 和@PathVariable 之間的區別:
@RequestParam 用來獲得靜態URL中傳入的參數,@PathVariable 用來獲得動態URL中的參數
4 @RequestBody
@RequestBody綁定的是一個對象實體,將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個對象。
1) 該注解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然后把相應的數據綁定
到要返回的對象上;
2) 再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上。
使用方法:
@Controller
@RequestMapping(value = "user/login")
@ResponseBody
// 將ajax(datas)發出的請求寫入 User 對象中
public User login(@RequestBody User user) {
// 這樣就不會再被解析為跳轉路徑,而是直接將user對象寫入 HTTP 響應正文中
return user;
}
或者:
@PostMapping(value = "requestBody")
@ResponseBody
public User requestBody(@RequestBody User user){
System.out.println("user:"+user.getName());
return user;
}
request的body部分的數據編碼格式由header部分的Content-Type指定;
@RequestBody不支持Get請求?(存疑)因為get請求沒有HttpEntity。