2014-02-17 3 views
34

Пожалуйста, исправьте меня, если я ошибаюсь. Оба могут использоваться для Связывание данных.Весна: @ModelAttribute VS @RequestBody

Вопрос в том, когда следует использовать @ModelAttribute?

@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) 
public String processSubmit(@ModelAttribute Pet pet) { } 

Кроме того, когда использовать @RequestBody?

@RequestMapping(value = "/user/savecontact", method = RequestMethod.POST 
public String saveContact(@RequestBody Contact contact){ } 

Согласно моему пониманию, обе служат аналогичной цели.

Спасибо!

ответ

1

Вы можете сразу получить доступ к «домашнему животному» объекту в виде слоя, если вы используете ModelAttribute аннотации. Кроме того, вы можете создать экземпляр этого объекта в методе на вашем контроллере, чтобы разместить свою модель. see this.

ModelAttribute дает возможность использовать этот объект частичным, но с RequestBody, вы получите все тело запроса.

8

@ModelAttribute используется для связывания данных из запроса пар (в ключевых парах значений),

но @RequestBody используется для связывания данных из отверстия тела запроса, как POST, PUT .. типы запросов, которые содержат другой формат, как json, xml.

19

Простейший способ для моего понимания состоит в том, что строка @ModelAttribute займет строку запроса. поэтому все данные передаются на сервер через URL-адрес.

Что касается @RequestBody, все данные будут переданы на сервер через полный корпус JSON.

5

Я нахожу, что @RequestBody (также аннотирует класс как @RestController) лучше для запросов AJAX, где у вас есть полный контроль над содержимым выдаваемого запроса, и содержимое отправляется как XML или JSON (из-за Джексона). Это позволяет содержимому легко создавать объект модели. И наоборот, @ModelAttribute, по-видимому, лучше подходит для форм, где есть «командный» объект, поддерживающий форму (которая необязательно может быть модельным объектом).

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