Пример Ajax для Spring 3.0 MVC - PullRequest
       2

Пример Ajax для Spring 3.0 MVC

2 голосов
/ 18 октября 2010

Я пытаюсь отправить запрос Ajax на контроллер Spring MVC и сопоставить его с классом Java соответственно:

public class Person  implements Serializable {
    private MutableLong Id = new MutableLong();
    @NotEmpty
    @Size(min = 1, max = 50)
        String FirstName=null;
        @NotEmpty
        @Size(min = 1, max = 50)
        String LastName=null;
        public Person(){}
        public long getId(){
            return this.Id.longValue();
        }
   //getters and setters
} 

тогда у меня есть JavaScript, который отправляет запрос AJAX:

function loadXMLDoc(){
    if(window.ActiveXObject)
    {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if(window.XMLHttpRequest)
    {
      xmlHttp=new XMLHttpRequest();
    }
    xmlHttp.onreadystatechange=handleStateChange;
    xmlHttp.open("POST","/authenticate.dlp", true);
    xmlHttp.setRequestHeader('Content-Type', 'application/json');
    param = '{\"FirstName\"=\"test\",\"LastName\"=\"test2\"}';
    xmlHttp.send(param);
}

и затем сам контроллер:

@RequestMapping(value="/authenticate.dlp",method = RequestMethod.POST)
         @ResponseBody
          public String getAjax(@RequestBody Person person){
          Set<ConstraintViolation<Person>> failures = validator.validate(person);
          if(!failures.isEmpty())
    //......     
      }

Похоже, нет ответа от сервера. Если я использую Fiddler, я вижу следующий ответ от сервера:

Сервер отклонил этот запрос потому что объект запроса находится в формат не поддерживается запрашиваемым ресурс для запрошенного метода ().

Что я делаю не так?

Ответы [ 3 ]

5 голосов
/ 18 октября 2010

Есть две возможные причины:

  • Вы забыли <mvc:annotation-driven />.Он автоматически настраивает конвертеры HTTP-сообщений для использования с @RequestBody / @ResponseBody
  • У вас нет JSON-процессора Джексона в пути к классам.Весна требует, чтобы это связывало application/json с @RequestBody
0 голосов
/ 22 октября 2010

Это не совсем ответ на ваш вопрос, но вы смотрели на DWR раньше?Это делает JS to Java RPC очень простым.http://directwebremoting.org/dwr/index.html

0 голосов
/ 22 октября 2010

Просто пара других полезных ссылок ... посмотрите это сообщение в блоге Spring:

http://blog.springsource.com/2010/07/22/spring-mvc-3-showcase/

И примеры, которые используют @ResponseBody:

https://src.springframework.org/svn/spring-samples/mvc-showcase/

Существует также ResponseEntity:

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/http/ResponseEntity.html

@RequestMapping("/ajax/helloworld")
public ResponseEntity<String> helloworld() {
   HttpHeaders headers = new HttpHeaders();
   headers.setContentType(MediaType.APPLICATION_JSON);
   return new ResponseEntity<String>("Hello World", headers, HttpStatus.OK);
}

Где вместо «Hello World» вы можете вернуть маршаллированный объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...