【问题标题】:Controller can't receive JSON from JQuery.ajax控制器无法从 JQuery.ajax 接收 JSON
【发布时间】:2016-08-12 08:31:58
【问题描述】:

我检查了我的 web.xml 和 spring-servlet.xml,没有发现任何错误。然后我检查了我的 Controller 和 .ajax(),但仍然无法找出任何问题。我尝试JSON.stringify@RequestParam,在spring-servlet.xml 中添加json handler。甚至将@RequestBody 更改为@RequestBody(required = false)。他们都没有工作,仍然收到此消息:

org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpMessageNotReadable Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.Test.Controller.Login.login(com.Test.Model.User)

这是我的控制器:

@RequestMapping(value = "/main", method = RequestMethod.GET)
public String login (@RequestBody User user) {

    boolean result = userSer.login(user);

    if (result)
        return "success";
    else 
        return "fail";
}

我的 ajax:

    function login() {
        //I can read the value in chrome's debug.
        var user = {
            "username": $("#username").val(),
            "password": $("#password").val()
        };

        $.ajax( {
            url: "/login/main",
            type: "GET",
            dataType: "json",
            //contentType:"application/json",
            data: JSON.stringify(user),
            success: function () {
                alert("success")
            },
            error:  function () {
                alert("fail")
            }
        } );
    }

我已经尝试自己解决这个问题,但仍然无法弄清楚。

【问题讨论】:

    标签: jquery json spring


    【解决方案1】:

    首先,如果你想发送一个 JSON Body,你需要使用 POST。 GET 仅在 URL 中有变量,这对您不起作用。同样在 Web 开发中,使用 POST 提交来自用户的数据是一个普遍的共识。

    我已经成功使用了,使用邮递员进行了测试:

    POST: {
       "username":"00346845869585",
       "password":"test"
    }
    
    
    @Controller
    @EnableAutoConfiguration
    public class SampleController {
    
        @RequestMapping("/")
        @ResponseBody
        String home() {
            return "Hello World!";
        }
    
        public static class User {
            private String username;
            private String password;
    
            public String getUsername() {
                return username;
            }
    
            public String getPassword() {
                return password;
            }
    
            public User setUsername(String username) {
                this.username = username;
                return this;
            }
    
            public User setPassword(String password) {
                this.password = password;
                return this;
            }
        }
    
    
        @RequestMapping(value = "/main", method = RequestMethod.POST)
        @ResponseBody
        public String login(@RequestBody User user) {
    
            boolean result = user.getPassword().equals("test");
    
            if (result)
                return "success";
            else
                return "fail";
        }
    
    
        public static void main(String[] args) throws Exception {
            SpringApplication.run(SampleController.class, args);
        }
    } 
    

    还有 javascript:

    <html>
    <head>
        <title>Title</title>
    
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    </head>
    <body>
    
    <form>
        <input type="text" id="username"/>
        <input type="password" id="password"/>
    
        <input type="submit" id="submit"/>
    
    </form>
    
    <script>
    
        function login() {
            var user = {
                "username": $("#username").val(),
                "password": $("#password").val()
            };
    
            $.ajax({
                url: "/main",
                type: "POST",
                data: JSON.stringify(user),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function () {
                    alert("success")
                },
                error: function () {
                    alert("fail")
                }
            });
        }
    
        $("#submit").click(function () {
            login();
            return false
        });
    
    </script>
    
    </body>
    </html>
    

    【讨论】:

    • 感谢您的帮助。我试过你的方法,成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    相关资源
    最近更新 更多