一次搞定SpringMVC參數綁定

SpringMVC參數綁定,簡單來講就是將客戶端請求的key/value數據綁定到controller方法的形參上,而後就能夠在controller中使用該參數了bash

下面經過5個經常使用的註解演示下如何進行參數綁定:cookie

1. @PathVariable註解

@PathVariable 是用來得到請求url中的動態參數的,能夠將URL中的變量映射到功能處理方法的參數上,其中URL 中的 {xxx} 佔位符能夠經過@PathVariable(「xxx「) 綁定到操做方法的入參中。session

示例代碼:
@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=2app

2.@RequestHeader註解

@RequestHeader 註解,能夠把Request請求header部分的值綁定到方法的參數上。post

示例代碼:
@ResponseBody
    @RequestMapping("/testHeaderParam")
    public void testHeaderParam(HttpServletRequest request, @RequestHeader String param1) {
        System.out.println("經過RequestHeader獲取的參數param1=" + param1);
    }
複製代碼

Postman發送請求截圖:


發送請求截圖

輸出結果:

經過RequestHeader獲取的參數param1=abcui

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=ebef978eef6c46f8a95cc0990d2d360aurl

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);spa

@RequestParam註解實質是將Request.getParameter() 中的Key-Value參數Map利用Spring的轉化機制ConversionService配置,轉化成參數接收對象或字段,
get方式中queryString的值,和post方式中body data的值都會被Servlet接受到並轉化到Request.getParameter()參數集中,因此@RequestParam能夠獲取的到;code

該註解有三個屬性: 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的內容

相關文章
相關標籤/搜索