天天看點

@PathVariable和@RequestBody 和 @Requestparam和HttpServletRequest 的差別

網上翻閱了很多部落格,對這三種參數做了總結,如有不足指出,請在評論指出。

@PathVariable綁定URI模闆變量值

@PathVariable是用來獲得請求url中的動态參數的

@PathVariable用于将請求URL中的模闆變量映射到功能處理方法的參數上。//配置url和方法的一個關系*@RequestMapping(“item/{itemId}”)*

@PathVariable和@RequestBody 和 @Requestparam和HttpServletRequest 的差別

@RequestParam

注解@RequestParam接收的參數是來自HTTP請求體或請求url的QueryString中。

RequestParam可以接受簡單類型的屬性,也可以接受對象類型。

@RequestParam有三個配置參數:

  • ​required​

    ​​ 表示是否必須,預設為​

    ​true​

    ​,必須。
  • ​defaultValue​

    ​ 可設定請求參數的預設值。
  • ​value​

    ​ 為接收url的參數名(相當于key值)。

@RequestParam用來處理 ​

​Content-Type​

​ 為 ​

​application/x-www-form-urlencoded​

​ 編碼的内容,​

​Content-Type​

​預設為該屬性。@RequestParam也可用于其它類型的請求,例如:POST、DELETE等請求。

是以在postman中,要選擇body的類型為 ​

​x-www-form-urlencoded​

​​,這樣在headers中就自動變為了 ​

​Content-Type​

​​ : ​

​application/x-www-form-urlencoded​

​ 編碼格式。如下圖所示:

@PathVariable和@RequestBody 和 @Requestparam和HttpServletRequest 的差別

但是這樣不支援批量插入資料啊,如果改用 ​

​json​

​​ 字元串來傳值的話,類型設定為 ​

​application/json​

​​,點選發送的話,會報錯,背景接收不到值,為 ​

​null​

​。

這時候,注解@RequestBody就派上用場了。繼續往下看 ↓

@RequestBody

注解@RequestBody接收的參數是來自requestBody中,即請求體。一般用于處理非 ​

​Content-Type: application/x-www-form-urlencoded​

​​編碼格式的資料,比如:​

​application/json​

​​、​

​application/xml​

​等類型的資料。

就​

​application/json​

​類型的資料而言,使用注解@RequestBody可以将body裡面所有的json資料傳到後端,後端再進行解析。

GET請求中,因為沒有HttpEntity,是以@RequestBody并不适用。

POST請求中,通過HttpEntity傳遞的參數,必須要在請求頭中聲明資料的類型Content-Type,SpringMVC通過使用

(HttpServletRequest request) 這個在攔截器中碰到過,不能使用json 除了表單在vue可以使用 let