Ajax和SpringMVC之间的json数据传输有两种方式:
1.直接传输Json对象
2.将Json序列化成json字符串
1.直接传输Json对象
前端Ajax
1$(document).ready(function(){ 2 $("#btn_login").click(function(){ 3 var dataJson = { 4 username:$("#username").val(), 5 password:$("#password").val() 6 }; 7 $.ajax({ 8 url:"/login/", 9 type:"post", 10 data:dataJson, 11 contentType:"application/x-www-form-urlencoded",//如不设置此项,默认也为此,设置发送给后端的类型 12 dataType:"json",//设置接收后端的数据的类型 13 async:true,//设置异步,不然可能接收不到后端返回的json 14 success:function(data){//data为后端返回的json 15 if(data.code==0){ 16 window.location.reload(); 17 } 18 else { 19 20 } 21 } 22 }); 23 }); 24});
后端使用
1@RequestMapping(path = {"/login/"}, method = {RequestMethod.GET, RequestMethod.POST}) 2 @ResponseBody 3 public String login(@RequestParam("username") String username, 4 @RequestParam("password") String password, 5 HttpServletResponse response) { 6 try { 7 Map<String, Object> map = userService.login(username, password); 8 if (map.containsKey("ticket")) { 9 Cookie cookie = new Cookie("ticket", map.get("ticket").toString()); 10 cookie.setPath("/"); 11 response.addCookie(cookie); 12 //return "redirect:/"; 13 return CommonUtil.getJSONString(0, "成功"); 14 } else { 15 //return "redirect:/"; 16 return CommonUtil.getJSONString(1, map); 17 } 18 19 } catch (Exception e) { 20 logger.error("登录异常" + e.getMessage()); 21 //return "redirect:/"; 22 return CommonUtil.getJSONString(1, "注册异常"); 23 } 24 }
使用@RequestParam,即使用Servlet的request.getgetParameter。这种方式可以接受以application/x-www-form-urlencoded这种方式传输的JSON对象的。
2.将Json序列化
前端Ajax
1$(document).ready(function(){ 2 $("#btn_reg").click(function(){ 3 var dataJson = { 4 username:$("#regusername").val(), 5 password:$("#regpassword").val() 6 }; 7 $.ajax({ 8 url:"/reg/", 9 type:"post", 10 contentType:"application/json",//以json字符串形式传输 11 data:JSON.stringify(dataJson),//将json对象序列化成字符串 12 dataType:"json", 13 async:true, 14 success:function(data){ 15 if(data.code==0){ 16 window.location.reload(); 17 } 18 else { 19 20 } 21 } 22 }); 23 24 }); 25});
后端Controller
1@RequestMapping(path = {"/reg/"}, method = {RequestMethod.GET, RequestMethod.POST}) 2 @ResponseBody 3 public String reg(@RequestBody User user, 4 HttpServletResponse response) { 5 try { 6 Map<String, Object> map = userService.register(user.getUsername(), user.getPassword()); 7 if (map.containsKey("ticket")) { 8 Cookie cookie = new Cookie("ticket", map.get("ticket").toString()); 9 cookie.setPath("/"); 10 11 response.addCookie(cookie); 12 return CommonUtil.getJSONString(0, "注册成功"); 13 } else { 14 return CommonUtil.getJSONString(1, map); 15 } 16 17 } catch (Exception e) { 18 logger.error("注册异常" + e.getMessage()); 19 return CommonUtil.getJSONString(1, "注册异常"); 20 } 21 }
@RequestBody中的user中,必须有与前端名称一致的属性,才可以接受到相应数据。
除此之外,@RequestBody还可用Map<String,Object> map来接收。