在使用ajax發送請求時,如果發送的JSON數據的參數是一個類中的不同屬性,在Controller類的方法中使用@RequestBody Object obj會直接封裝進obj對象中
例如:
前端部分代碼
JavaScript
1 <script language="JavaScript"> 2 function login(){ 3 var user_name = $("#user_name").val(); //用戶名 4 var user_password = $("#user_password").val; //用戶密碼 5 6 $.ajax({ 7 url:"<%=path%>/User/Login", 8 type:"POST", 9 async: false, 10 contentType:"application/json;charset=UTF-8", 11 dataType:'json', 12 data:JSON.stringify({"user_name":user_name,"user_password":user_password}), //將JSON對象轉為字符串 13 success:function(data){ 14 15 } 16 }); 17 } 18 </script>
form表單
1 <form> 2 <div class="form-group"> 3 <label for="user_name" stype="display:inline;">用戶名:</label> 4 <input id="user_name" type="text" class="form-control" style="display:inline;" autocomplete="off" /> 5 </div> 6 <div class="form-group"> 7 <label for="user_password" style="display:inline;">用戶密碼:</label> 8 <input id="user_password" type="text" class="form-control" style="display:inline;" autocomplete="off" /> 9 </div> 10 <div class="col"> 11 <div class="col-md-4" style="text-align: right;"> 12 <button type="submit" class="btn btn-success" onclick="login()">登錄</button> 13 </div> 14 </div> 15 </form>
此時前端向后端傳入JSON數據
User類部分代碼
1 public class User implements Serializable { 2 private Integer user_name; //用戶名 3 private String user_password; //用戶密碼 4 ...... 5 }
Controller部分代碼
1 @Controller 2 @RequestMapping("/User") 3 public class UserController { 4 5 @RequestMapping(value = "/Login",method = {RequestMethod.POST}) 6 public @ResponseBody Boolean Login(@RequestBody User user) { 7 //此時user.getUser_name()就是前端的user_name 8 //user.getUser_password()就是前端的user_password 9 //根據輸入的用戶名及用戶密碼和數據庫對比判斷是否登錄成功,並返回一個布爾值告訴前端 10 ······ 11 return true/false; 12 }
如果此時ajax提交的JSON數據為
1 data:JSON.stringify({"user_name":admin,"user_password":123)
在Controller內加入輸出語句
1 public @ResponseBody Boolean Login(@RequestBody User user) { 2 System.out.println(user.getUser_name()); 3 System.out.println(user.getUser_password()); 4 ······ 5 return true/false; 6 }
輸出的結果為
1 admin 2 123
但是,如果ajax發送的請求體中的參數並不是同一個類的不同屬性,應該如何處理呢?
例如:
form表單中增加了一項驗證碼:verifycode。此時,假如ajax提交的JSON數據為
1 data:JSON.stringify({"user_name":admin,"user_password":123,"verifycode":666})
如果采用@RequestBody String body接收,輸出的將是JSON字符串
1 @RequestMapping(value = "/Login",method = {RequestMethod.POST}) 2 public @ResponseBody Boolean Login(@RequestBody String body) { 3 //此時body是整個請求體的內容 4 System.out.println(body); 5 //······ 6 }
輸出的結果為
1 {"user_name":admin,"user_password":123,"verifycode":666}
但我們想拿到每個參數的對應值,此時可以采用Map<String,String> map接收
1 @RequestMapping(value = "/Login",method = {RequestMethod.POST}) 2 public @ResponseBody Boolean Login(@RequestBody Map<String,String> map) { 3 //此時map.get("user_name")就是前端的user_name 4 System.out.println(map.get("user_name")); 5 //map.get("user_password")就是前端的user_password 6 System.out.println(map.get("user_password")); 7 //map.get("verifycode")就是前端的verifycode 8 System.out.println(map.get("verifycode")); 9 ······ 10 }
輸出的結果為
1 admin 2 123 3 666