SpringMVC引數系結,簡單來說就是將客戶端請求的key/value資料系結到controller方法的形參上,然后就可以在controller中使用該引數了
下面通過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=2
2.@RequestHeader注解
@RequestHeader 注解,可以把Request請求header部分的值系結到方法的引數上,
示例代碼:
@ResponseBody @RequestMapping("/testHeaderParam") public void testHeaderParam(HttpServletRequest request, @RequestHeader String param1) { System.out.println("通過RequestHeader獲取的引數param1=" + param1); }
Postman發送請求截圖:

輸出結果:
通過RequestHeader獲取的引數param1=abc
3.@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=ebef978eef6c46f8a95cc0990d2d360a
4.@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=10
5.@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的內容
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/27396.html
標籤:Java
上一篇:go系列教程-字串
