2016-08-12 142 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

感謝您的幫助。我嘗試了你的方法,並且成功了。 –