@RequestBody使用


@RequestBody:

作用:

主要用來接收前端傳遞給后端json字符串中的數據的(請求體中的數據的);

 

要求:

GET方式無請求體,所以使用@RequestBody接收數據時,前端不能使用GET方式提交數據,而是用POST方式進行提交。

在后端的同一個接收方法里,@RequestBody與@RequestParam()可以同時使用,@RequestBody最多只能有一個,而@RequestParam()可以有多個。

簡言之:

一個請求——》只有一個@RequestBody;

一個請求——》可以有多個@RequestParam。

 

******①同時使用@RequestParam()和@RequestBody

  @RequestParam( )指定的參數可以是普通元素、數組、集合、對象等等

     (即: @RequestBody 與@RequestParam()可以同時使用時,原SpringMVC接收參數的機制不變,只不過RequestBody 接收的是請求體里面的數據(get是默認的請求體,post是提交表單需要的請求體);而RequestParam接收的是key-value里面的參數,所以它會被切面進行處理從而可以用普通元素、數組、集合、對象等接收)。

因此:

   1、如果參數時放在請求體中,傳入后台的話,那么后台要用@RequestBody才能接收到

     否則就會在數據庫中不能完成curd操作; 

   2、如果不是放在 請求體中的話,那么后台接收前台傳過來的參數時,要用@RequestParam來接收,或則形參前什么也不寫也能接收。

 

******②參數前寫了@RequestParam(xxx)

       1、前端必須有對應的xxx名字才行(不管是否有值,可通過設置該注解的required屬性來調節是否必須傳)

       2、如果沒有xxx名的話,那么請求會出錯,報400。

 

******③參數前不寫@RequestParam(xxx)

  1、前端是否有對應的xxx名字都行,如果有xxx名的話,那么就會自動匹配

  2、沒有的話,請求也能正確發送。

      &&&追注:這里與feign消費服務時不同;feign消費服務時,如果參數前什么也不寫,那么會被默認@RequestBody的。

******④如果后端參數是一個對象,且該參數前是以@RequestBody修飾的,那么前端傳遞json參數時,必須滿足以下要求:

后端@RequestBody注解對應的類在將HTTP的輸入流(含請求體)裝配到目標類

(也就是:@RequestBody后面的類)時,會根據json字符串中的key來匹配對應實體類的屬性,如果匹配一致且json中的該key對應的值符合)

(或者說:實體類的對應屬性的類型要求時,會調用實體類的setter方法將值賦給該屬性。)

  1、json字符串中,如果value為  ""  的話(空串),后端對應屬性如果是String類型的,那么接受到的就是  "" 

           如果是后端屬性的類型是Integer、Double等類型,那么接收到的就是null。

  2、json字符串中,如果value為null的話,后端對應收到的就是null。

  3、如果某個參數沒有value的話,在傳json字符串給后端時,要么干脆就不把該字段寫到json字符串中;要么寫value時, 必須有值,null  或""都行。

    千萬不能有類似"stature":,這樣的寫法,如:

                             

 

總結:

結論①:@JsonAlias注解,實現:json轉模型時,使json中的特定key能轉化為特定的模型屬性;但是模型轉json時,
               對應的轉換后的key仍然與屬性名一致

結論②:@JsonProperty注解,實現:json轉模型時,使json中的特定key能轉化為指定的模型屬性;同樣的,模
               型轉json時,對應的轉換后的key為指定的key

結論③:@JsonAlias注解需要依賴於setter、getter,而@JsonProperty注解不需要。

結論④:在不考慮上述兩個注解的一般情況下,key與屬性匹配時,默認大小寫敏感。

結論⑤:有多個相同的key的json字符串中,轉換為模型時,會以相同的幾個key中,排在最后的那個key的值給模
               型屬性復制,因為setter會覆蓋原來的值。見示例中的gender屬性。

結論⑥:后端@RequestBody注解對應的類在將HTTP的輸入流(含請求體)裝配到目標類(即:@RequestBody后面
               的類)時,會根據json字符串中的key來匹配對應實體類的屬性,如果匹配一致且json中的該key對應的值
               符合(或可轉換為)實體類的對應屬性的類型要求時,會調用實體類的setter方法將值賦給該屬性。

 轉自CSDN大神:https://blog.csdn.net/justry_deng/article/details/80972817

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM