下面通過5個常用的註解演示下如何進行參數綁定:
1. @PathVariable註解
@PathVariable 是用來獲得請求url中的動態參數的,可以將URL中的變量映射到功能處理方法的參數上,其中URL 中的 {xxx} 佔位符可以通過@PathVariable(“xxx“) 綁定到操作方法的入參中。
示例代碼:
@ResponseBody
@RequestMapping("/testUrlPathParam/{param1}/{param2}")
public void testUrlPathParam(HttpServletRequest request, @PathVariable String param1, @PathVariable String param2) {
System.out.println("通過PathVariable獲取的參數param1=" + param1);
System.out.println("通過PathVariable獲取的參數param2=" + param2);
}
Postman發送請求截圖:
發送請求截圖
輸出結果:
通過PathVariable獲取的參數param1=1通過PathVariable獲取的參數param2=22.@RequestHeader註解
@RequestHeader 註解,可以把Request請求header部分的值綁定到方法的參數上。
示例代碼:
@ResponseBody
@RequestMapping("/testHeaderParam")
public void testHeaderParam(HttpServletRequest request, @RequestHeader String param1) {
System.out.println("通過RequestHeader獲取的參數param1=" + param1);
}
Postman發送請求截圖:
發送請求截圖
輸出結果:
通過RequestHeader獲取的參數param1=abc3.@CookieValue註解
@CookieValue 可以把Request header中關於cookie的值綁定到方法的參數上。
示例代碼:
@ResponseBody
@RequestMapping("/testCookieParam")
public void testCookieParam(HttpServletRequest request, HttpServletResponse response, @CookieValue String sessionid) {
System.out.println("通過CookieValue獲取的參數sessionid=" + sessionid);
}
Postman發送請求截圖:
發送請求截圖
輸出結果:
通過CookieValue獲取的參數sessionid=ebef978eef6c46f8a95cc0990d2d360a4.@RequestParam註解
@RequestParam註解用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容。提交方式為get或post。(Http協議中,form的enctype屬性為編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認為application/x-www-form-urlencoded);
@RequestParam註解實質是將Request.getParameter() 中的Key-Value參數Map利用Spring的轉化機制ConversionService配置,轉化成參數接收對象或字段,
get方式中queryString的值,和post方式中body data的值都會被Servlet接受到並轉化到Request.getParameter()參數集中,所以@RequestParam可以獲取的到;
該註解有三個屬性: value、required、defaultValue; value用來指定要傳入值的id名稱,required用來指示參數是否必錄,defaultValue表示參數不傳時候的默認值。
示例代碼:
@ResponseBody
@RequestMapping("/testRequestParam")
public void testRequestParam(HttpServletRequest request,
@RequestParam(value = "num", required = true, defaultValue = "0") int num) {
System.out.println("通過RequestParam獲取的參數num=" + num);
}
Postman發送請求截圖:
輸出結果:
通過RequestParam獲取的參數num=105.@RequestBody註解
@RequestBody註解用來處理HttpEntity(請求體)傳遞過來的數據,一般用來處理非Content-Type: application/x-www-form-urlencoded編碼格式的數據;
GET請求中,因為沒有HttpEntity,所以@RequestBody並不適用;
POST請求中,通過HttpEntity傳遞的參數,必須要在請求頭中聲明數據的類型Content-Type,SpringMVC通過使用HandlerAdapter配置的HttpMessageConverters來解析HttpEntity中的數據,然後綁定到相應的bean上。
示例代碼:
@ResponseBody
@RequestMapping("/testRequestBody")
public void testRequestBody(HttpServletRequest request, @RequestBody String bodyStr){
System.out.println("通過RequestBody獲取的參數bodyStr=" + bodyStr);
}
Postman發送請求截圖:
發送請求截圖
代碼運行結果:
通過RequestBody獲取的參數bodyStr=這是body的內容作者:Java碎碎念
原文:轉載自微信公眾號,Java碎碎念
閱讀更多 Java識堂 的文章