日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

@RequestBody注解分析

發(fā)布時間:2024/9/19 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 @RequestBody注解分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

@RequestBody注解風析

get和post

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

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

1.@RequestBody

1.1用途:

  • 用于接收前端傳遞給后端的json字符串中的數(shù)據(jù)。(處理json格式的數(shù)據(jù))
  • @RequestBody用來接收前端傳遞給后端的json字符串中的數(shù)據(jù),GET方式的請求一般通過URL中攜帶key-value參數(shù),而@RequestBody接收的是請求體中的數(shù)據(jù)(json格式的數(shù)據(jù),只有請求體中能保存json),所以使用@RequestBody接收數(shù)據(jù)的時候必須是POST方式等方式。
  • @RequestBody與@RequestParam()可以同時使用,但@RequestBody最多只能有一個,而@RequestParam()可以多個。

1.2語法:

(@RequestBody Map map) (@RequestBody Object object)
  • (@RequestBody Map map)先對簡單,將json解析成Map形式的key-value對,直接通過map.get(“KeyName”)就能拿到值了
  • (@RequestBody Object object) 通過json字符串中的key來匹配對應實體類的屬性如果匹配一致且json中的該key對應的值符合實體類的對應屬性的類型要求時,會調(diào)用實體類的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ù)會通過反序列數(shù)據(jù)到實體類中,并且在反序列的過程中會進行類型的轉(zhuǎn)換。
  • 在json中應該用null來代表空值,如果是""(空字符串)會判斷為空串,如果實體類屬性是String類型的,那么接受到的就是"",如果實現(xiàn)類屬性類型是Integer、Double等類型,那么接收到的就是null。
{name:"",age:null }
  • (@RequestBody Object object)內(nèi)部是通過傳遞過來的數(shù)據(jù)中的Key尋找setter方法,有則調(diào)用,無則不作任何操作(其實可以設計)。
  • 如果通過Key匹配到setter方法,但是Value無法轉(zhuǎn)換為對應的實例類屬性的類型時,拋出異常。

2.@RequestParam

2.1 用途:

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

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

語法:

@RequestParam(value=”參數(shù)名”,required=true/false,defaultValue=””)
  • value:參數(shù)的key
  • required:是否為必須,請求中必須包含該參數(shù),如果不包含就報錯。
  • defaultValue:代替的默認參數(shù)值,設置后required將自動置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()可以同時使用,但@RequestBody最多只能有一個,而@RequestParam()可以多個。
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(); }

總結(jié)

以上是生活随笔為你收集整理的@RequestBody注解分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。