springmvc+Ajax+JSON(@RequestBody 使用问题)

在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" 这样就可以了。

 

posted @ 2016-04-08 15:25  墨林2015  阅读(4484)  评论(0编辑  收藏  举报