将javascript响应变量传递给spring控制器函数

vbN*_*bie 5 javascript spring

以下javascript代码与出现的facebook登录窗口一起使用,并允许用户登录.捕获响应值,我知道它可以在设置中出现警报,但我无法将值传递回控制器方法.

 @RequestMapping(value ="/getAccessToken" , method = RequestMethod.POST)
 public @ResponseBody String getAccessToken(@RequestBody String token){

     System.out.println(token);

     return token;
  } 
Run Code Online (Sandbox Code Playgroud)

Javascript方法调用:

    function doLogin() {
        FB.login(function(response) {
        alert(response);
        console.log(response);
        if (response.authResponse) {
                    alert(response.authResponse.userID);
                    alert(response.authResponse.accessToken);
                    var Token = response.authResponse.accessToken;
                    alert(Token);
                    $.ajax({
                        type: "POST",
                        url: "/HelloController/getAccessToken",
                        data: Token,
                        success: function (result) {
                              alert("Token");
                        },
                        error: function (result) {
                              alert("oops");
                        }
                    });
                     document.getElementById('loginBtn').style.
         display = 'none';
         getUserData();
        }}, {perms:'manage_pages', 
       scope: 'email,public_profile', return_scopes: true});
     };
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

WARN 25660 --- [nio-8080-exec-9] 
o.s.web.servlet.PageNotFound             : 
Request method 'POST' not supported
Run Code Online (Sandbox Code Playgroud)

感谢回应.

Pab*_*mer 2

问题可能是您使用的是新版本的 JQuery,它将请求数据作为 post 表单数据而不是默认的 JSON 发送。尝试将您的 ajax 调用更改为以下内容。您的控制器无法识别表单数据,因此如果是这种情况,您应该会看到 404。

$.ajax({
        type: "POST",
        traditional: true,
        url: "/HelloController/getAccessToken",
        data: JSON.stringify(Token),
        success: function (result) {
           alert("Token");
        },
        error: function (result) {
          alert("oops");
        }
      });
Run Code Online (Sandbox Code Playgroud)

有关参考,请参阅这篇文章:通过 POST (ajax) 发送 JSON 数据并从控制器 (MVC) 接收 json 响应