springboot獲取參數的幾種方式


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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM