2014-02-17 12 views
34

Bitte korrigieren Sie mich, wenn ich falsch liege. Beide können für Datenbindung verwendet werden.Spring: @ModelAttribute VS @RequestBody

Die Frage ist, wann @ModelAttribute zu verwenden?

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

Darüber hinaus, wann @RequestBody zu verwenden?

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

Nach meinem Verständnis dient beiden der ähnliche Zweck.

Danke !!

Antwort

1

Sie können direkt Ihr „Haustier“ Objekt in Ansicht Schicht zugreifen, wenn Sie ModelAttribute Anmerkung verwenden. Sie können dieses Objekt auch in einer Methode auf Ihrem Controller instanziieren, um Ihr Modell einzufügen. see this.

ModelAttribute gibt Ihnen die Möglichkeit diese Aufgabe teilweise zu nutzen, aber mit RequestBody, Sie alle Körper der Anfrage erhalten.

8

@ModelAttribute zum Binden von Daten von Anfrage param (in Schlüsselwertpaaren) verwendet,

aber @RequestBody verwendete Daten aus Lochkörpern der Anforderung wie Post für die Bindung, PUT .. Anforderungstypen, die wie anderes Format enthalten json, xml.

19

Der einfachste Weg für mein Verständnis ist, die @ModelAttribute wird eine Abfragezeichenfolge nehmen. Daher werden alle Daten über die URL an den Server übertragen.

Wie bei @RequestBody werden alle Daten über einen vollständigen JSON-Text an den Server übergeben.

5

Ich finde, dass @RequestBody (auch Annotation einer Klasse als @RestController) ist besser für AJAX-Anfragen, wo Sie vollständige Kontrolle über den Inhalt der Anfrage haben und der Inhalt wird entweder als XML oder JSON gesendet (wegen Jackson). Dadurch können die Inhalte leicht ein Modellobjekt erstellen. Umgekehrt scheint @ModelAttribute besser für Formulare geeignet zu sein, bei denen ein "Befehls" -Objekt ein Formular unterstützt (das nicht unbedingt ein Modellobjekt sein muss).

Verwandte Themen