簡體   English   中英

控制器無法從JQuery.ajax接收JSON

[英]Controller can't receive JSON from JQuery.ajax

我檢查了我的web.xml和spring-servlet.xml,沒有發現任何錯誤。 然后,我檢查了我的Controller和.ajax(),但仍然找不到任何錯誤。 我嘗試JSON.stringify@RequestParam JSON.stringify ,在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")
            }
        } );
    }

我已經嘗試過自己解決此問題,但仍然無法解決。

首先,如果要發送JSON正文,則需要使用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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM