在jsp页面利用Ajax传输json,发现进不了控制器,去掉控制器方法里面的@RequestBody注释,就没有问题。
控制器方法如下:
@RequestMapping(value="/login", method=RequestMethod.POST) @ResponseBody public String login(@RequestBody User user,HttpServletRequest request){ User selUser = userService.login(user); request.setAttribute("User", selUser); if(selUser !=null){ return "/allUser"; }else{ return "/allUser"; } }
jsp页面代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="<%=application.getContextPath()%>/js/jquery.js"></script> <script type="text/javascript"> function loginS(){ alert("aaaa"+$("#username").val()+", "+$("#password").val()); var user = {username:$("#username").val(),password:$("#password").val()}; $.ajax({ type:'post', url:'${pageContext.request.contextPath }/user/login.do', contentType:'application/json;charset=utf-8', //数据格式是json串,商品信息 data:user, success:function(data){//返回json结果 alert(data); } }); } </script> </head> <body> <form id="user" action="user/login.do" method="post"> <table> <tr><td><input id="username" name="username" type="text" placeholder="用户名" /></td></tr> <tr><td><input id="password" name="password" type="password" placeholder="密码" /></td></tr> <tr><td colspan="2"><input type="button" id="login" value="登录" onclick="loginS();" /></td></tr> </table> </form> </body> </html>
经多方查的原因是 :
@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以了。