亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

SpringMVC接收與響應json數據的幾種方式

2024-07-14 08:43:48
字體:
來源:轉載
供稿:網友

前言

前后端的數據交互,除了通過form表單進行提交外,也可以通過ajax向后端傳遞和接收json格式數據(這種方式可以實現請求數據和頁面分離)。本文將總結一下在Spring MVC中接收和響應json數據的幾種方式。

話不多說了,來一起看看詳細的介紹吧

準備步驟:

1.導入json相關框架的依賴(比如jackson)。

2.spring mvc的controller方法正常寫,如果需要響應json,增加@responsebody注解。

3.在接受json對應的輸入參數前,加上@RequestBody注解。

服務端接收json數據還原為java對象,稱為反序列化,反之,將java對象作為響應轉換為json數據發回給客戶端,稱為序列化。

注意:因為要使用ajax,所有一定要引入jQuery,切記!

jackson maven依賴:

  <!-- jackson依賴 -->  <dependency>   <groupId>com.fasterxml.jackson.core</groupId>   <artifactId>jackson-core</artifactId>   <version>2.7.0</version>  </dependency>  <dependency>   <groupId>com.fasterxml.jackson.core</groupId>   <artifactId>jackson-databind</artifactId>   <version>2.7.0</version>  </dependency>  <dependency>   <groupId>com.fasterxml.jackson.core</groupId>   <artifactId>jackson-annotations</artifactId>   <version>2.7.0</version>  </dependency>

一、以實體類接收

背景:當ajax傳遞的參數較多時,采用參數名匹配的方法不太方便。如果后臺有對應的實體類,這時可以選擇在客戶端將數據封裝為json格式傳遞給后臺,后臺用對應的實體類進行接收。

客戶端:

<button onclick="clickMe()">點我</button><script> function clickMe() {  $.ajax({   type : 'POST',   url : "acceptJsonByEntity",   contentType : "application/json;charset=utf-8",   // 如果想以json格式把數據提交到后臺的話,JSON.stringify()必須有,否則只會當做表單提交   data : JSON.stringify({    "bookId" : 1,    "author" : "Jack"   }),   // 期待返回的數據類型   dataType : "json",   success : function(data) {    var bookId = data.bookId;    var author = data.author;    alert("success:" + bookId+','+author);   },   error : function(data) {    alert("error" + data);   }  });</script>

@responseBody注解是將controller的方法返回的對象通過適當的轉換器轉換為指定的格式之后,寫入到response對象的body區,通常用來返回JSON數據或者是XML。

@RequestBody注解常用來處理content-type不是默認的application/x-www-form-urlcoded編碼的內容。一般情況下來說常用其來處理application/json類型。

Controller:

@Controllerpublic class PassJsonParam { @RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST) @ResponseBody public Book acceptJsonByEntity(@RequestBody Book book, HttpServletRequest request){  System.out.println("當前http請求方式為:"+request.getMethod());  System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor());  return book; }}

控制臺輸出:當前http請求方式為:POST bookId=1, author=Jack

客戶端(彈窗):success:1,Jack

如果Controller中的所有方法都需要返回json格式數據,可以使用@RestController注解。
@RestController = @Controller + @ResponseBody

Controller(上面的Controller可以用下面的替換):

@RestControllerpublic class PassJsonParam { @RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST) public Book acceptJsonByEntity(@RequestBody Book book, HttpServletRequest request){  System.out.println("當前http請求方式為:"+request.getMethod());  System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor());  return book; }}

注意:使用了@RestController注解后,Controller的方法無法再返回jsp頁面或者html,配置的視圖解析器也不會起作用。

二、以map方式接收

背景:前臺向后臺發送ajax請求并且攜帶很多參數,而后臺并沒有對應的實體類進行接收又該如何處理呢?最常見的就是表單,這里可以考慮使用map來解決。因為map的數據結構為key-value形式,所以我們可以遍歷搜索框表單,將表單的name作為map的key,表單的value作為map的value。

客戶端:

<form id="bookForm"> <input type="text" name="bookName" id="bookName"> <input type="text" name="author" id="author" > <button onclick="submitForm(event)">提交</button></form><script> function submitForm(event) {  //阻止form默認事件  event.preventDefault();  //得到搜索框數據  var map = new Map();  $("#bookForm input").each(function () {   var value = $(this).val();  //input 值   var name = $(this).attr('name');   map.set(name,value);  })  //Map轉為Json的方法  var obj= Object.create(null);  for (var [k,v] of map) {   obj[k] = v;  }  $.ajax({   type: 'POST',   contentType:'application/json',   url: "acceptJsonByMap",   data: JSON.stringify(obj),   dataType: 'json',   success: function (data) {    var bookName = data.bookName;    var author = data.author;    alert("bookName ="+bookName+"; author="+author);   },   error: function (data) {    alert("失敗啦");   }  }); }</script>

Controller:

 @RequestMapping(value="acceptJsonByMap") @ResponseBody public Map<String,Object> acceptJsonByMap(@RequestBody Map<String,Object> paramsMap, HttpServletRequest request){  System.out.println("當前http請求方式為:"+request.getMethod());  System.out.println(paramsMap);  return paramsMap; }

控制臺輸出:當前http請求方式為:POST {bookName=Love, author=Frank}

客戶端(彈窗):bookName =Love; author=Frank

三、以list方式接收(以json數組形式傳遞)

客戶端:

<button onclick="clickHere()">clickHere</button><script> function clickHere() {  var params1 = {   "bookId":"123",   "author":"Rose"  };  var params2 = {   "bookId":"321",   "author":"Jack"  };  var list = [];  list.push(params1);  list.push(params2);  $.ajax({   type: 'POST',   contentType:'application/json',   url: "acceptJsonByList",   data: JSON.stringify(list),   dataType: 'json',   success: function (data) {    for (let i = 0; i < data.length; i++) {     var bookId = data[i].bookId;     var author = data[i].author;     alert("bookId ="+bookId+"; author="+author);    }   },   error: function (data) {    alert("失敗啦");   }  }); }</script>

注意:傳遞到后端時,list應為[ { key1 : value1}{ key2 : value2} ]的json格式數據,否則可能會出現Json parse error錯誤。

Controller:

 @RequestMapping(value="acceptJsonByList") @ResponseBody public List<Book> acceptJsonByList(@RequestBody List<Book> book, HttpServletRequest request){  System.out.println("當前http請求方式為:"+request.getMethod());  System.out.println(book);  return book; }

注意:這里需要Book實體類進行接收。

控制臺輸出:當前http請求方式為:POST [entity.Book@1138a75c, entity.Book@22d1cbcf]

客戶端(彈窗):bookId =123; author=Rose bookId =321; author=Jack

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人av电影天堂| 亚洲区在线播放| 欧美最猛性xxxx| 亚洲国产一区二区三区在线观看| 成人黄色在线观看| 欧美精品videofree1080p| 在线成人激情视频| 亚洲国产免费av| 欧美日韩福利视频| 成人免费网视频| 久久久久久久国产精品| 97免费视频在线| 欧美日韩福利在线观看| 91大神在线播放精品| 亚洲肉体裸体xxxx137| 久久精品99久久香蕉国产色戒| 69av在线播放| 成人免费福利视频| 亚洲tv在线观看| 国产成人激情视频| 主播福利视频一区| 亚洲综合视频1区| 91精品啪aⅴ在线观看国产| 午夜精品在线视频| 亚洲一区免费网站| 欧美在线视频免费观看| 伊人久久久久久久久久| 97国产精品人人爽人人做| 亚洲欧洲在线视频| 亚洲视频视频在线| 欧美激情免费视频| 18一19gay欧美视频网站| 欧美日本中文字幕| 精品日韩美女的视频高清| 欧美极品美女视频网站在线观看免费| 色哟哟网站入口亚洲精品| 亚洲理论在线a中文字幕| 亚洲成人动漫在线播放| 成人综合国产精品| 最新中文字幕亚洲| 热99精品只有里视频精品| 亚洲美女精品成人在线视频| 亚洲精品电影网| 色樱桃影院亚洲精品影院| 2021久久精品国产99国产精品| 伊人久久免费视频| 亚洲第一页中文字幕| 精品偷拍一区二区三区在线看| 日韩免费观看高清| 成人xxxxx| 国产精品一区二区三区在线播放| 日韩精品极品在线观看| 国产精品入口免费视频一| 国产国语刺激对白av不卡| 国产精品入口日韩视频大尺度| 日韩久久免费电影| 亚洲一区二区中文| 国产精品视频网| 成人精品视频久久久久| 欧美性猛交xxxx黑人| 日韩美女中文字幕| 欧美成人全部免费| 亚洲国产另类 国产精品国产免费| 国产999精品久久久影片官网| 欧美成人午夜激情在线| 欧美性在线观看| 亚洲第一视频网| 国产一区二区三区四区福利| 精品国产依人香蕉在线精品| 青青草国产精品一区二区| 国产精品久久电影观看| 97精品在线观看| 欧美日韩另类字幕中文| 国产精品2018| 91日韩在线视频| 国产精品手机播放| 亚洲a区在线视频| 国产成人一区二区三区小说| 欧美性视频网站| 日本精品免费一区二区三区| 中文字幕在线看视频国产欧美| 热re99久久精品国产66热| 日韩禁在线播放| 亚洲欧洲在线看| 性日韩欧美在线视频| 欧美日韩一区二区三区在线免费观看| 美日韩精品免费观看视频| 色香阁99久久精品久久久| 中文字幕亚洲无线码在线一区| 精品福利视频导航| 韩国视频理论视频久久| 成人黄色午夜影院| 日韩中文在线中文网在线观看| 国产精品久久一区主播| 日韩有码片在线观看| 国产精品视频免费在线| 久久精品最新地址| 久久精品视频免费播放| 亚洲国产三级网| 欧美一级电影在线| 国产精品三级网站| 精品国产乱码久久久久酒店| 欧美精品一区二区免费| 国产日韩在线一区| 欧美精品激情blacked18| 精品久久久久久久久国产字幕| 一区二区亚洲欧洲国产日韩| 中日韩午夜理伦电影免费| 日韩中文字幕视频在线| 91精品中国老女人| 久久香蕉国产线看观看网| 日韩精品在线观看一区| 日韩av电影在线网| 成人久久久久久久| 欧美性xxxxxx| 亚洲专区国产精品| 精品无人国产偷自产在线| 亚洲国产精品久久91精品| 粉嫩av一区二区三区免费野| 日韩精品免费在线观看| 国产精品久久不能| 国产91精品久久久久久| 成人精品网站在线观看| 少妇高潮久久77777| 欧美极品少妇xxxxⅹ裸体艺术| 欧美成人精品影院| 久久免费视频这里只有精品| 国产精品久久精品| 日韩中文在线视频| 国产精品91久久久| 国产精品高潮呻吟久久av无限| 国产精品伦子伦免费视频| 69av视频在线播放| 久久九九亚洲综合| 欧美成人午夜剧场免费观看| 久久福利网址导航| 国产精品美女久久久免费| 久久影视电视剧免费网站| 日韩av电影在线播放| 久久免费在线观看| 91大神福利视频在线| 亚洲国产另类久久精品| 欧美激情第三页| 在线不卡国产精品| 国产精品视频午夜| 亚洲成人1234| 2018日韩中文字幕| 激情成人中文字幕| 亚洲精品中文字幕有码专区| 91在线观看免费高清| 俺也去精品视频在线观看| 欧美视频一区二区三区…| 国产97在线|日韩| 国产亚洲精品久久| 久青草国产97香蕉在线视频| 欧美国产日韩中文字幕在线| 一个色综合导航| 97精品欧美一区二区三区| 亚洲 日韩 国产第一| 欧美激情高清视频| 欧美与黑人午夜性猛交久久久| 日韩精品日韩在线观看| 成人激情在线观看| 久久中国妇女中文字幕|