spring mvc利用ajax向controller傳遞對象的方法示例
前言
最近因為工作的需要,在寫一個基于springmvc+spring+mybatis的項目,其中涉及用ajax向controller發(fā)送數(shù)據(jù)的功能。因為不想使用spring的form標簽,所以想看看有沒有方法將ajax中的json數(shù)據(jù)直接轉(zhuǎn)化為controller方法中的對象接收并處理。以下將逐漸介紹各種不同情況下傳遞json數(shù)據(jù)并封裝的方法,下面話不多說,一起來看看詳細的介紹:
基礎(chǔ)類型
如果傳遞的json數(shù)據(jù)為基礎(chǔ)類型(Int,String等)的話,則只需要用@RequestParam標注方法中的參數(shù)就行了。
ajax代碼
$.ajax({ url : "someurl", type : "POST", dataType : "JSON", data : {"name":"test", "password":"testpassword"}, success : function (data) { console.log(data) } })
java代碼
@RequestMapping("someurl") public @ResponseBody SomeData basicType(@RequestParam String name, @RequestParam String password){ //具體方法 }
在這里@ResponseBody
說明返回的是一個對象。@RequestParam
的用法還很多,具體可以去參考springmvc的文檔
簡單的對象類型
簡單的對象類型是指,在對象中不包含復雜的數(shù)據(jù)結(jié)構(gòu)類似于list,map等。在這里可以使用標簽@ModelAttribute
來直接將JSON數(shù)據(jù)封裝成對象。
假設(shè)我們有一個用戶對象,用戶的屬性包括name,age
public class User{ private String name; private int age; //getters and setters }
ajax傳輸?shù)臄?shù)據(jù)如下
$.ajax({ url : "someurl", type : "POST", dataType : "JSON", data : { 'name : 'test', 'age' : 10 }, success : function (data) { console.log(data) } })
controller中的代碼如下
@RequestMapping("someurl") public @ResponseBody SomeData objects(@ModelAttribute User user){ //具體方法 }
springmvc 暫時不支持接收并生成多個modelAttribute
數(shù)組類型
有些情況下,可能需要傳遞一組相同類型的數(shù)據(jù),比如添加一組用戶的信息。這是可以通過ajax傳遞一個數(shù)組給controller方法。具體情況可以參考這個回答
這個回答給的非常的詳細具體,需要補充的是,接收端的數(shù)據(jù)結(jié)構(gòu)無論是List<T>
或是T[]都可以成功獲得數(shù)組數(shù)據(jù)。
復雜的對象
但是上面的方法有一個問題,就是只能接收純數(shù)組數(shù)據(jù)。假設(shè)一個對象,比如用戶,該用戶下的屬性除了包含name(名稱),age(年齡)之外,還有一個聯(lián)系方式屬性contacts(List<String>)
,如何才能將既包含基本類型又包含數(shù)組類型的JSON數(shù)據(jù)直接封裝成對象呢?這里就需要標簽@RequestBody
ajax代碼如下,需要注意的是,這里需要用JSON.stringfy()
方法將json數(shù)據(jù)轉(zhuǎn)化成字符流,添加至requestbody中。且在ajax方法中必須指明contentType和dataType屬性。
public class User{ private String name; private int age; private List<String> contacts; //或是 private String[] contacts; //getters and setters }
$.ajax({ var user = { 'name' : 'test', 'age ' : 10, 'contacts' : ['12313','123213123'] } url : "someurl", type : "POST", dataType : "JSON", contentType:"application/json", data : JSON.stringify(user), success : function (data) { console.log(data) } })
java代碼如下
@RequestMapping("someurl") public @ResponseBody SomeData complicateObject(@RequestBody User user){ //方法詳情 }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Spring Boot引入swagger-ui 后swagger-ui.html無法訪問404的問題
這篇文章主要介紹了Spring Boot引入swagger-ui 后swagger-ui.html無法訪問404的問題及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09Springboot整合實現(xiàn)郵件發(fā)送的原理詳解
SpringBoot集成郵件服務(wù)非常簡單,通過簡單的學習即可快速掌握郵件業(yè)務(wù)類的核心邏輯和企業(yè)郵件的日常服務(wù),本文給大家分享Springboot整合實現(xiàn)郵件發(fā)送的原理,一起看看吧2021-06-06idea中acitviti使用acitBPM插件出現(xiàn)亂碼問題及解決方法
這篇文章主要介紹了idea中acitviti使用acitBPM插件出現(xiàn)亂碼問題及解決方法,通過將File Encodings內(nèi)容設(shè)置為UTF-8,本文通過圖文展示,需要的朋友可以參考下2021-06-06MyBatis 中 ${}和 #{}的正確使用方法(千萬不要亂用)
這篇文章主要介紹了MyBatis 中 ${}和 #{}的正確使用方法,本文給大家提到了MyBatis 中 ${}和 #{}的區(qū)別,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07Java微信二次開發(fā)(三) Java微信各類型消息封裝
這篇文章主要為大家詳細介紹了Java微信二次開發(fā)第三篇,Java微信各類型消息封裝,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04