Отправка данных JSON на сервер Ошибка - PullRequest
2 голосов
/ 20 сентября 2011

Я хочу отправить данные JSON в обработчик POST моего контроллера.Я делаю это на стороне клиента:

var userName = $('#userName').val();
var password = $('#password').val();
var mail = $('#mail').val();
var admin =$("#admin").is(':checked');
var user = {userName: userName, password: password, mail: mail, admin:admin};

$.ajax({
   async : false,
   type:'POST',
   url: '/uxiy/webapp/uxmer',
   data: user,
   dataType: 'json',
   success: function(data) {
       ...
   },
   error: function(data) {
       ...
   }
});

Мой контроллер Spring выглядит следующим образом:

@RequestMapping(method = RequestMethod.POST)
public void createUser(HttpServletResponse response, @RequestBody User user) {
    user.setName("POST worked");
    //todo If error occurs response.sendError(HttpServletResponse.SC_NOT_FOUND);
    response.setStatus(HttpServletResponse.SC_OK);
}

Однако, когда я отправляю свои данные, я получаю эту ошибку в Firebug:

"NetworkError: 415 Неподдерживаемый тип носителя"

Что не так?

PS: Пример сведений о Firebug POST:

Parameters  application/x-www-form-urlencoded
admin   true
mail    user@user.com
password    r
userName    userx
Source
userName=userx&password=r&mail=user%40user.com&admin=true

PS2: После того, как я добавил

contentType: 'application/json',

, он начал давать

"NetworkError: 400 Bad Request" 

В чем может быть проблема, выполнение сериализации и т. Д.?

PS3: Здесь: http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/ здесь написано:

Если имеются ошибки проверки, возвращается HTTP 400 с сообщениями об ошибках, в противном случаевозвращается HTTP 200.

У меня 400 Ошибка неверного запроса.Может быть, проблема связана с этим?

Ответы [ 3 ]

4 голосов
/ 05 октября 2011

Проблема была в массиве JSON. Это была недопустимая строка JSON, отправленная с клиента на сервер.

<ч /> Редактировать

Чтобы прояснить это, я наткнулся на этот пост. Требуется сделать правильный JSON.stringify(data) в запросе Ajax. Странно, но это не делается функцией .ajax при установке соответствующего dataType.

$.ajax({
    async : false,
    type:'POST',
    url: '/uxiy/webapp/uxmer',
    data: JSON.stringify(user),
    dataType: 'json',
    success: function(data) {
        ...
    },
    error: function(data) {
        ...
    }
});
1 голос
/ 20 сентября 2011

Установите тип контента на application/json, иначе Джексон не сработает.

$.ajax({
   async : false,
   type:'POST',
   contentType: 'application/json',
   url: '/uxiy/webapp/uxmer',
   data: user,
   dataType: 'json',
   success: function(data) {
       ...
   },
   error: function(data) {
       ...
   }
});
0 голосов
/ 20 сентября 2011

Вам необходимо установить тип носителя, который будет принят вашим контроллером.

Документация:

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html

Взгляните на ContentNegotiatingViewResolver

Заголовок Accept: в основном то, что вам нужно беспокоиться.

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