@RequestBody注解分析
生活随笔
收集整理的這篇文章主要介紹了
@RequestBody注解分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
@RequestBody注解風(fēng)析
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語法:
(@RequestBody Map map) (@RequestBody Object object)- (@RequestBody Map map)先對(duì)簡單,將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。
- (@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ù))
語法:
@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è)。
總結(jié)
以上是生活随笔為你收集整理的@RequestBody注解分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 却能一边刷抖音却能一边刷抖音一边赚钱
- 下一篇: 显卡的BIOS是什么