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" 這樣就可以了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM