2016-08-12 4 views
0

Я проверил свой web.xml и spring-servlet.xml, ничего страшного, что я могу найти. Затем я проверил свой контроллер и .ajax(), но все еще не могу понять ничего плохого. Я пробую JSON.stringify, @RequestParam, добавив json handler в spring-servlet.xml. Даже изменил @RequestBody на @RequestBody(required = false). Ни один из них не работал и до сих пор получаю сообщение:Контроллер не может получать JSON от JQuery.ajax

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

Мой Аякса:

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-адресе, которые не будут работать для вас. Также в веб-разработке принято общее мнение о том, что вы отправляете данные от пользователя, использующего 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

Спасибо за вашу помощь. Я попробовал ваш метод и добился успеха. –

Смежные вопросы