2016-08-12 62 views
0

我检查了我的web.xml和spring-servlet.xml,我没发现任何错误。然后我检查了我的Controller和.ajax(),但仍然找不到任何错误。我尝试JSON.stringify,@RequestParam,在spring-servlet.xml中加入json handler。甚至将@RequestBody更改为@RequestBody(required = false)。他们没有工作,仍然得到这个消息:控制器无法从JQuery.ajax接收JSON

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") 
      } 
     }); 
    } 

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

回答

0

首先,如果你想发送一个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> 
+1

感谢您的帮助。我尝试了你的方法,并且成功了。 –