2014-12-23 3 views
4

Я отправляю список объектов json и пытаюсь десериализовать его в контроллере Spring. Но все время я получаю ошибку «Плохой запрос» и результаты в код состояния 415. Однако мой массив json является допустимым.Deserializing json array в Spring MVC controller

является JSON -

{ "пользователи": [{ "Username": "Джон", "электронная почта": "[email protected]", "user_id": " u223344" }, { "Username": "Смит", "электронная почта": "[email protected]", "user_id": "u223345" } ] }

Ajax вызова заключается в следующем -

$.ajax({ 
url: $("#addNewUser").attr("action"), 
data: JSON.stringify({users : dataToSend}), 
dataType: 'json', 
type: "POST", 
beforeSend: function(xhr) { 
    xhr.setRequestHeader("Accept", "application/json"); 
    xhr.setRequestHeader("Content-Type", "application/json"); 
}, 
success: function(data){ 
     alert('success= ' + data); 
}, 
error:function(data,status,er) { 
    alert("error: "+ data.responseText +" status: "+status+" er:"+er); 
} 

});

Классы обертки следующие. Пользователь и UserWrapper класс -

public class User { 

private String email; 

private String userName; 

private String user_id; 

//getters and setters 

}

public class UserWrapper { 

private List<User> userList; 

//getter and setter 

}

И, наконец, весной MVC контроллер -

@RequestMapping(value="/user/add", method=RequestMethod.POST, 
     produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) 
@ResponseBody 
public void createTeamMember(@RequestBody UserWrapper userWrapper) { 

    try{ 
     for(User user : userWrapper.getUserList()){ 
      System.out.println(user.getEmail()); 
      } 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    } 

} 

Я добавил зависимость для ДЖЕКСОНА-ядра и jackson-mapper в pom.xml. И я использую Spring 4.0.3. Любая помощь приветствуется.

+0

Какая полная ошибка на стороне сервера? – sidgate

+0

Можете ли вы проверить сетевой запрос и убедитесь, что установлен тип контента – kamoor

+0

Вы пытаетесь добавить пользователя в контроллер задачи добавления. Вы уверены, что используете правильный метод контроллера? – shazin

ответ

0

Я еще не буду подозревать ошибку привязки к серверу, потому что вы получаете ошибку 415 - Неподдерживаемый тип носителя. Вы устанавливаете правильный тип носителя на контроллере, и, следовательно, сторона сервера выглядит хорошо.

На стороне клиента, пожалуйста, убедитесь, что вы используете jquery 1.5+, чтобы убедиться, что методSend() вызван.

Легче способ типа контента будет,

$.ajax({ 
     url:api, 
     .... 
     contentType: "application/json" 
    }); 

Пожалуйста, проверьте запрос сети из браузера и убедитесь, что тип содержимого установлен в заголовке.

Если вы получили 400-Bad Request, вы можете начать искать проблемы десериализации.

+0

Я использую JQuery 1.11 и проверял сеть также, он устанавливает тип контента как приложение/json –

1

Я думаю, что нужно изменить @RequestBody POJO на UserWrapper

@RequestMapping(value="/task/add", method=RequestMethod.POST, 
     produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) 
@ResponseBody 
public void createTeamMember(@RequestBody UserWrapper userWrapper) { 
    // Code to create members 
} 
+0

, ранее я тоже пробовал .. не работает !! –

1

Как @shazin говорит, вы, скорее всего, отправил неправильный метод на ваш вопрос, или если нет, то просто сделать изменения, он посоветовал.

Вам понадобится другое исправление, которое переименовывает свойство usersList из UserWrapper в users так, чтобы оно соответствовало отправляемому объекту JSON.

У нас эти исправления, у вас не должно быть никаких проблем, так как ваш запрос в порядке.

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