RequestBody 和 RequestParam
在前後端傳json資料進行互動的時候,同學們會經常用到的兩個注解。
@RequestBody和@RequestParam主要是用來接收前端傳給後端的json資料。一般來說,@RequestBody注解一般使用在post請求中,因為前端将json資料放在了請求體中。在後端接收的方法裡@RequestBody可以和@RequestParam同時使用,但一個方法裡,@RequestBody隻能有一個,@RequestParam可以有多個。@RequestParam使用在GET請求方式中,可以接收普通元素、數組、集合、對象等。
如果參數放在請求體中,傳入背景需要用@RequestBody進行接收;如果不是放在請求體中的話,那麼背景接收前台傳過來的參數時,要用@RequestParam進行對應接收。
使用@RequestParam(xxx),前端必須要有對應的xxx名字,可以通過設定reqired屬性來調節是否必須傳。
如果不寫@RequestParam(xxx)的話,那麼會自動比對方法參數,如果命名不同會預設接收為空。
如果後端接收參數是一個對象,且該參數是用@RequestBody修飾的,那麼前端json傳資料,要滿足:後端将http輸入流裝配到目标類時,會根據json字元串中的key來比對對應實體類的屬性,如果比對一緻且json中的key對應符合,那麼後端能成功接收
json字元串中,如果value為""的話,後端對應屬性如果是String類型的,那麼接受到的就是"",如果後端對應的是引用類型Integer、Double等的話,那麼就收的就是null
json字元串中,如果value為null的話,後端接收到的就是null
如果某個參數沒有value,在傳json給後端的時候,要麼幹脆不該把蓋子端寫到json中,要麼就給value指派""或null
RequestBody 使用方法一
這裡有Person類,對應屬性有String name,Integer age,可以通過String來接收json串
RequestBody 使用方法二
可以使用對象來接收前端json串
Request 使用方法三
可以混合前二者使用,如果是複雜對象(類中組合了其他的類),可以使用對象接收,或者重寫組合對象的toString()方法讓其傳回json串,進而使用字元串接收。
後端接受參數是一個對象的時候,如果類的屬性定義值和json的key不對應,可以使用JsonAlias或者JsonProperty來進行更改指定。
ResponseBody
@ResponseBody注解主要是用來傳回json資料給前端,如果你很懶,隻想傳回一個對象,那麼加上@ResponseBody可以實作将傳回的對象自動轉換為json傳傳回給前端。
在springboot中可以使用@RestController來代替@ResponseBody,如果不使用會報各種錯(NumberFormatException...for input String)
作者:張一粟
連結:https://juejin.im/post/6886641620578467853
來源:掘金