SpringMVC Controller解析ajax參數(shù)過(guò)程詳解
在使用ajax發(fā)送請(qǐng)求時(shí),如果發(fā)送的JSON數(shù)據(jù)的參數(shù)是一個(gè)類中的不同屬性,在Controller類的方法中使用@RequestBody Object obj會(huì)直接封裝進(jìn)obj對(duì)象中
例如:
前端部分代碼
JavaScript
<script language="JavaScript">
function login(){
var user_name = $("#user_name").val(); //用戶名
var user_password = $("#user_password").val; //用戶密碼
$.ajax({
url:"<%=path%>/User/Login",
type:"POST",
async: false,
contentType:"application/json;charset=UTF-8",
dataType:'json',
data:JSON.stringify({"user_name":user_name,"user_password":user_password}), //將JSON對(duì)象轉(zhuǎn)為字符串
success:function(data){
}
});
}
</script>
form表單
<form>
<div class="form-group">
<label for="user_name" stype="display:inline;">用戶名:</label>
<input id="user_name" type="text" class="form-control" style="display:inline;" autocomplete="off" />
</div>
<div class="form-group">
<label for="user_password" style="display:inline;">用戶密碼:</label>
<input id="user_password" type="text" class="form-control" style="display:inline;" autocomplete="off" />
</div>
<div class="col">
<div class="col-md-4" style="text-align: right;">
<button type="submit" class="btn btn-success" onclick="login()">登錄</button>
</div>
</div>
</form>
此時(shí)前端向后端傳入JSON數(shù)據(jù)
User類部分代碼
public class User implements Serializable {
private Integer user_name; //用戶名
private String user_password; //用戶密碼
......
}
Controller部分代碼
@Controller
@RequestMapping("/User")
public class UserController {
@RequestMapping(value = "/Login",method = {RequestMethod.POST})
public @ResponseBody Boolean Login(@RequestBody User user) {
//此時(shí)user.getUser_name()就是前端的user_name
//user.getUser_password()就是前端的user_password
//根據(jù)輸入的用戶名及用戶密碼和數(shù)據(jù)庫(kù)對(duì)比判斷是否登錄成功,并返回一個(gè)布爾值告訴前端
······
return true/false;
}
如果此時(shí)ajax提交的JSON數(shù)據(jù)為
data:JSON.stringify({"user_name":admin,"user_password":123)
在Controller內(nèi)加入輸出語(yǔ)句
public @ResponseBody Boolean Login(@RequestBody User user) {
System.out.println(user.getUser_name());
System.out.println(user.getUser_password());
······
return true/false;
}
輸出的結(jié)果為
admin
123
但是,如果ajax發(fā)送的請(qǐng)求體中的參數(shù)并不是同一個(gè)類的不同屬性,應(yīng)該如何處理呢?
例如:
form表單中增加了一項(xiàng)驗(yàn)證碼:verifycode。此時(shí),假如ajax提交的JSON數(shù)據(jù)為
data:JSON.stringify({"user_name":admin,"user_password":123,"verifycode":666})
但是verifycode并不是User類中的屬性,不能由@RequestBody User user中的user接收
如果采用@RequestBody String body接收,輸出的將是JSON字符串
@RequestMapping(value = "/Login",method = {RequestMethod.POST})
public @ResponseBody Boolean Login(@RequestBody String body) {
//此時(shí)body是整個(gè)請(qǐng)求體的內(nèi)容
System.out.println(body);
//······
}
輸出的結(jié)果為
{"user_name":admin,"user_password":123,"verifycode":666}
但我們想拿到每個(gè)參數(shù)的對(duì)應(yīng)值,此時(shí)可以采用Map<String,String> map接收
@RequestMapping(value = "/Login",method = {RequestMethod.POST})
public @ResponseBody Boolean Login(@RequestBody Map<String,String> map) {
//此時(shí)map.get("user_name")就是前端的user_name
System.out.println(map.get("user_name"));
//map.get("user_password")就是前端的user_password
System.out.println(map.get("user_password"));
//map.get("verifycode")就是前端的verifycode
System.out.println(map.get("verifycode"));
······
}
輸出的結(jié)果為
admin
123
666
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于java中構(gòu)造函數(shù)的一些知識(shí)詳解
下面小編就為大家?guī)?lái)一篇關(guān)于java中構(gòu)造函數(shù)的一些知識(shí)詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
windows?java?-jar無(wú)法啟動(dòng)jar包簡(jiǎn)單的解決方法
這篇文章主要介紹了windows?java?-jar無(wú)法啟動(dòng)jar包簡(jiǎn)單的解決方法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-12-12
DoytoQuery中關(guān)于N+1查詢問(wèn)題解決方案詳解
這篇文章主要為大家介紹了DoytoQuery中關(guān)于N+1查詢問(wèn)題解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Java中時(shí)間戳和時(shí)間的轉(zhuǎn)換方法代碼
這篇文章主要介紹了Java中時(shí)間戳和時(shí)間的轉(zhuǎn)換的相關(guān)資料,Java8中時(shí)間戳與日期時(shí)間對(duì)象之間的轉(zhuǎn)換是編程中常見(jiàn)的操作,通過(guò)時(shí)間字符串獲取時(shí)間對(duì)象也是其中的一種方法,需要的朋友可以參考下2025-03-03
解決mybatis-plus3.1.1版本使用lambda表達(dá)式查詢報(bào)錯(cuò)的方法
這篇文章主要介紹了解決mybatis-plus3.1.1版本使用lambda表達(dá)式查詢報(bào)錯(cuò)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
SpringBoot錯(cuò)誤處理機(jī)制以及自定義異常處理詳解
這篇文章主要為大家詳細(xì)介紹了SpringBoot錯(cuò)誤處理機(jī)制以及自定義異常處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
Java spring事務(wù)及事務(wù)不生效的原因詳解
在日常編碼過(guò)程中常常涉及到事務(wù),在前兩天看到一篇文章提到了Spring事務(wù),那么在此總結(jié)下在Spring環(huán)境下事務(wù)失效的幾種原因2021-09-09

