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

