摘要:客戶端提交阻止默認事件得到搜索框數據值轉為的方法失敗啦當前請求方式為控制臺輸出當前請求方式為客戶端彈窗三以方式接收以數組形式傳遞客戶端失敗啦注意傳遞到后端時應為的格式數據,否則可能會出現錯誤。
前后端的數據交互,除了通過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依賴:
一、以實體類接收com.fasterxml.jackson.core jackson-core 2.7.0 com.fasterxml.jackson.core jackson-databind 2.7.0 com.fasterxml.jackson.core jackson-annotations 2.7.0
背景:當ajax傳遞的參數較多時,采用參數名匹配的方法不太方便。如果后臺有對應的實體類,這時可以選擇在客戶端將數據封裝為json格式傳遞給后臺,后臺用對應的實體類進行接收。
客戶端:
@responseBody注解是將controller的方法返回的對象通過適當的轉換器轉換為指定的格式之后,寫入到response對象的body區,通常用來返回JSON數據或者是XML。@RequestBody注解常用來處理content-type不是默認的application/x-www-form-urlcoded編碼的內容。一般情況下來說常用其來處理application/json類型。
Controller:
@Controller public 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可以用下面的替換):
@RestController public 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。
客戶端:
Controller:
@RequestMapping(value="acceptJsonByMap") @ResponseBody public MapacceptJsonByMap(@RequestBody Map 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數組形式傳遞)客戶端:
注意:傳遞到后端時,list應為[ { key1 : value1}{ key2 : value2} ]的json格式數據,否則可能會出現Json parse error錯誤。
Controller:
@RequestMapping(value="acceptJsonByList") @ResponseBody public ListacceptJsonByList(@RequestBody List 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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73662.html
摘要:簡介注解用于修飾的方法,根據的的內容,通過適當的轉換為客戶端需要格式的數據并且寫入到的數據區,從而不通過視圖解析器直接將數據響應給客戶端。并且這些解析器都實現了接口,在接口中有四個最為主要的接口方法。 SpringMVC 細節方面的東西很多,所以在這里做一篇簡單的 SpringMVC 的筆記記錄,方便以后查看。 Spring MVC是當前最優秀的MVC框架,自從Spring 2.5版本...
摘要:方法和對應的方法定義定義重啟服務器,運行上面的程序。五添加支持實現跨域訪問當訪問時,你可能需要面對同源策略問題。錯誤如下一般來說,在服務器端,我們在響應中返回額外的訪問控制頭,實現跨域鏈接。 一、理解 REST REST(Representational State Transfer),中文翻譯叫表述性狀態轉移。是 Roy Thomas Fielding 在他2000年的博士論文中提出...
摘要:是一個基于的框架。控制器將視圖響應給用戶通過視圖展示給用戶要的數據或處理結果。有了減少了其它組件之間的耦合度。 相關閱讀: 本文檔和項目代碼地址:https://github.com/zhisheng17/springmvc 轉載請注明出處和保留以上文字! 了解 Spring: Spring 官網:http://spring.io/ 一個好的東西一般都會有一個好的文檔解釋說明,如果你...
摘要:環境要求使用純來搭建環境,要求的版本必須在以上。即視圖解析器解析文件上傳等等,如果都不需要配置的話,這樣就可以了。可以將一個字符串轉為對象,也可以將一個對象轉為字符串,實際上它的底層還是依賴于具體的庫。中,默認提供了和的,分別是和。 在 Spring Boot 項目中,正常來說是不存在 XML 配置,這是因為 Spring Boot 不推薦使用 XML ,注意,并非不支持,Spring...
閱讀 2423·2021-10-09 09:59
閱讀 2177·2021-09-23 11:30
閱讀 2591·2019-08-30 15:56
閱讀 1145·2019-08-30 14:00
閱讀 2939·2019-08-29 12:37
閱讀 1253·2019-08-28 18:16
閱讀 1656·2019-08-27 10:56
閱讀 1022·2019-08-26 17:23