2013-03-01 2 views
2

Я попытался найти, как я могу писать весной на POST JSON из клиента REST. Например, я написал:Как отправить JSON весной?

@RequestMapping(value = "/{userId}/add", method = RequestMethod.POST, headers = {"content-type=application/json"}) 
@ResponseBody 
public Map<String, String> saveUser(@RequestBody User user, BindingResult result) { 
    Map<String, String> jsonResponse = new HashMap<String, String>(); 
    if (result.hasErrors()) { 
     jsonResponse.put("Message", "Can't add the user"); 
     jsonResponse.put("Code", "401"); 
     return jsonResponse; 
    } 
    userService.addUser(user); 
    jsonResponse.put("Message", "Success add User"); 
    jsonResponse.put("Code", "200"); 
    return jsonResponse; 
} 

End проверял его от клиента REST от Firefox. Но я видел ошибку 404. Что я делаю не так? Спасибо за помощь.

+0

Каково было содержимое HTTP-запроса, отправленного на сервер? –

+0

Например, я попытался как этот \t \t { "ID": 7, \t \t "маркер": нулевой, \t \t "nameUser": "Малдер Фокс", \t \t "Дата рождения": «25.10.1975 » \t \t "роль": "ROLE_USER", \t \t "позиция": "позиция", \t \t "электронная почта": "[email protected]", \t \t "Вход": "muldfox", \t \t "телефон": "+12356565", \t \t "адрес": нулевой, \t \t "организация": нулевая, \t \t "интересы": нулевая } – Maximus

+0

Там есть несколько возможностей: 1) Весна не возможность синтаксического анализа одного из полей, 2) поля в объекте JSON не соответствуют полям объекта User, 3) ваш URL-адрес может быть неправильным. Если вы отправляете весь HTTP-запрос и свой класс User в свой вопрос, возможно, мы сможем его сузить. Кроме того, если в ваших журналах есть трассировка стека исключений, это также было бы полезно. –

ответ

0

Во-первых, если URI вашего запроса закончился «/ user/2/add», он не будет отображаться в вашем методе, который отображается как «/ {userId}/add». Это приведет к ошибке HTTP 404, которую вы получите. Вместо этого ваш URI должен заканчиваться на «/ 2/add», если «userId» равен 2.

Во-вторых, аннотирование параметра пользователя с помощью @RequestBody недостаточно для сложного типа пользователя. Вам нужно будет преобразовать тело запроса JSON в объект User. Вы можете выполнить это с помощью MappingJacksonHttpMessageConverter. Объявив компонент этого типа, вы можете использовать аннотации Джексона, чтобы контролировать, как JSON анализируется в свойствах пользователя.

+0

Нет, я все сделал правильно. @RequestBody достаточно, потому что я использую Spring 3.0.x. Проблема заключалась в том, что я не использовал заголовок в заголовке запроса, когда тестировал его. – Maximus

+0

А, ладно. Рад, что вы его работали. –

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