欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMVC中RequestBody注解的List參數(shù)傳遞方式

 更新時(shí)間:2022年10月31日 09:42:27   作者:z.haoui  
這篇文章主要介紹了SpringMVC中RequestBody注解的List參數(shù)傳遞方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

RequestBody注解的List參數(shù)傳遞

Controller方法參數(shù):@RequestBody List<Long> ids

前端傳的json數(shù)據(jù):

[
? ? 1010,
? ? 1011
]

Controller方法參數(shù):@RequestBody User user

把List集合封裝在一個(gè)實(shí)體類型中,用該實(shí)體類型作為Controller的方法參數(shù)

User為實(shí)體類型,里面有個(gè)List<Long>類型的參數(shù)(假設(shè)名為userIds,且有對(duì)應(yīng)的getter、setter方法)

前端傳的json數(shù)據(jù):

{
? ? "userIds": [ 1, 2 ]
}

參考:Spring MVC 數(shù)據(jù)綁定

@RequestBody注解分析

get和post

GET可以擁有請(qǐng)求體,RFC 文檔中從來就沒有說過 GET 沒有請(qǐng)求體.RFC 只是說GET 意味著通過 URI 來識(shí)別資源。所以GET請(qǐng)求體中的數(shù)據(jù)一般都是不做處理的,有些 http 的 lib 里不讓甚至直接不提供 GET 方法追加請(qǐng)求體的操作。

POST請(qǐng)求擁有請(qǐng)求體,并且請(qǐng)求數(shù)據(jù)一般都是放在請(qǐng)求體當(dāng)中的。所以在處理POST請(qǐng)求時(shí),通常都是從請(qǐng)求體中獲取數(shù)據(jù)。

1.@RequestBody

1.1用途:

用于接收前端傳遞給后端的json字符串中的數(shù)據(jù)。(處理json格式的數(shù)據(jù))

@RequestBody用來接收前端傳遞給后端的json字符串中的數(shù)據(jù),GET方式的請(qǐng)求一般通過URL中攜帶key-value參數(shù),而@RequestBody接收的是請(qǐng)求體中的數(shù)據(jù)(json格式的數(shù)據(jù),只有請(qǐng)求體中能保存json),所以使用@RequestBody接收數(shù)據(jù)的時(shí)候必須是POST方式等方式。

@RequestBody與@RequestParam()可以同時(shí)使用,但@RequestBody最多只能有一個(gè),而@RequestParam()可以多個(gè)。

1.2語(yǔ)法:

(@RequestBody Map map)
(@RequestBody Object object)
  • (@RequestBody Map map)先對(duì)簡(jiǎn)單,將json解析成Map形式的key-value對(duì),直接通過map.get(“KeyName”)就能拿到值了
  • (@RequestBody Object object) 通過json字符串中的key來匹配對(duì)應(yīng)實(shí)體類的屬性如果匹配一致且json中的該key對(duì)應(yīng)的值符合實(shí)體類的對(duì)應(yīng)屬性的類型要求時(shí),會(huì)調(diào)用實(shí)體類的setter方法將值注入到該屬性。

如:

public Result deleteBookById(@RequestBody HashMap<String, String> map) {
? ? ? ? this.bookService.deleteBookById(Long.parseLong(map.get("id")));
? ? ? ? return Result.createWithSuccessMessage();
? ? }
public Result updateBookById(@RequestBody Book book){
? ? ? ? Book record = this.bookService.updateBookById(book);
? ? ? ? return Result.createWithModel(record);
? ? }

注意:

在(@RequestBody Object object)中,前端POST過來的數(shù)據(jù)會(huì)通過反序列數(shù)據(jù)到實(shí)體類中,并且在反序列的過程中會(huì)進(jìn)行類型的轉(zhuǎn)換。

在json中應(yīng)該用null來代表空值,如果是""(空字符串)會(huì)判斷為空串,如果實(shí)體類屬性是String類型的,那么接受到的就是"",如果實(shí)現(xiàn)類屬性類型是Integer、Double等類型,那么接收到的就是null。

{
?? ?name:"",
?? ?age:null
}

(@RequestBody Object object)內(nèi)部是通過傳遞過來的數(shù)據(jù)中的Key尋找setter方法,有則調(diào)用,無則不作任何操作(其實(shí)可以設(shè)計(jì))。

如果通過Key匹配到setter方法,但是Value無法轉(zhuǎn)換為對(duì)應(yīng)的實(shí)例類屬性的類型時(shí),拋出異常。

2.@RequestParam

2.1 用途:

@RequestParam用來處理 Content-Type 為 application/x-www-form-urlencoded 編碼的內(nèi)容,Content-Type默認(rèn)為該屬性。

可以用于接收URL中的參數(shù)并捆綁到方法的參數(shù)中,也可以接受post請(qǐng)求體中的Content-Type 為 application/x-www-form-urlencoded的數(shù)據(jù)。(post比較常用的是json格式數(shù)據(jù))

語(yǔ)法:

@RequestParam(value=”參數(shù)名”,required=”true/false”,defaultValue=””)

  • value:參數(shù)的key
  • required:是否為必須,請(qǐng)求中必須包含該參數(shù),如果不包含就報(bào)錯(cuò)。
  • defaultValue:代替的默認(rèn)參數(shù)值,設(shè)置后required將自動(dòng)置false

如:

public ModelAndView getUserByName(@RequestParam("name")String name){
? ? ? ? ModelAndView mv = new ModelAndView();
? ? ? ? log.info(name);
? ? ? ? return mv;
}
//必須攜帶name參數(shù)
public ModelAndView getUserByName2(@RequestParam("name",required="true")String name){
? ? ? ? ModelAndView mv = new ModelAndView();
? ? ? ? log.info(name);
? ? ? ? return mv;
}

3.兩者混合使用

@RequestBody與@RequestParam()可以同時(shí)使用,但@RequestBody最多只能有一個(gè),而@RequestParam()可以多個(gè)。
public Result deleteBookById(@RequestBody HashMap<String, String> map,@RequestParam("name")String name) {
? ? ? ? System.out.println(map.get("id"));
? ? ? ? System.out.println(name);
? ? ? ? return Result.createWithSuccessMessage();
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一篇文章帶你理解Java Spring三級(jí)緩存和循環(huán)依賴

    一篇文章帶你理解Java Spring三級(jí)緩存和循環(huán)依賴

    這篇文章主要介紹了淺談Spring 解決循環(huán)依賴必須要三級(jí)緩存嗎,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • SpringBoot ResponseEntity標(biāo)識(shí)Http響應(yīng)方式

    SpringBoot ResponseEntity標(biāo)識(shí)Http響應(yīng)方式

    這篇文章主要介紹了SpringBoot ResponseEntity標(biāo)識(shí)Http響應(yīng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java計(jì)算字符串公式的方式解讀

    Java計(jì)算字符串公式的方式解讀

    這篇文章主要介紹了Java計(jì)算字符串公式的方式解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Mapstruct對(duì)象插入數(shù)據(jù)庫(kù)某個(gè)字段總是為空的bug詳解

    Mapstruct對(duì)象插入數(shù)據(jù)庫(kù)某個(gè)字段總是為空的bug詳解

    這篇文章主要為大家介紹了在一次需求開發(fā)Mapstruct中對(duì)象插入數(shù)據(jù)庫(kù)某個(gè)字段總是為空的bug問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • sprinboot項(xiàng)目啟動(dòng)一半到圖形化界面卡住了的解決

    sprinboot項(xiàng)目啟動(dòng)一半到圖形化界面卡住了的解決

    這篇文章主要介紹了sprinboot項(xiàng)目啟動(dòng)一半到圖形化界面卡住了的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • idea中寫sql語(yǔ)句沒有提示字段的問題

    idea中寫sql語(yǔ)句沒有提示字段的問題

    在IDEA中編寫SQL時(shí)如果沒有字段提示,通常是因?yàn)闆]有設(shè)置注入語(yǔ)言,解決方法是通過快捷鍵Alt+Enter選擇“注入語(yǔ)言或引用”,然后選擇相應(yīng)的數(shù)據(jù)庫(kù)(如MySQL),之后重新輸入SQL語(yǔ)句即可,此方法可以有效解決IDEA中SQL語(yǔ)句提示問題,提高開發(fā)效率
    2024-09-09
  • 詳解@Autowired是如何注入變量的

    詳解@Autowired是如何注入變量的

    在?Spring?容器中,當(dāng)我們想給某一個(gè)屬性注入值的時(shí)候,有多種不同的方式,例如使用?@Autowired、@Inject等注解,下面小編就來和小伙伴們聊一聊,@Autowired?到底是如何把數(shù)據(jù)注入進(jìn)來的
    2023-07-07
  • Java上傳視頻實(shí)例代碼

    Java上傳視頻實(shí)例代碼

    本文通過實(shí)例代碼給大家講解了java上傳視頻功能,代碼分為頁(yè)面前臺(tái)和后臺(tái),工具類,具體實(shí)例代碼大家通過本文學(xué)習(xí)吧
    2018-01-01
  • Swagger-boostrap-ui如何配置用戶名密碼訪問

    Swagger-boostrap-ui如何配置用戶名密碼訪問

    這篇文章主要介紹了Swagger-boostrap-ui如何配置用戶名密碼訪問,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • java 使用線程監(jiān)控文件目錄變化的實(shí)現(xiàn)方法

    java 使用線程監(jiān)控文件目錄變化的實(shí)現(xiàn)方法

    這篇文章主要介紹了java 使用線程監(jiān)控文件目錄變化的實(shí)現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10

最新評(píng)論