2014-02-17 105 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用於從請求PARAM結合數據(在密鑰值對),

但@RequestBody用於從如POST請求的孔體結合數據,PUT ..其中包含像其它格式請求類型json,xml。

19

我的理解最簡單的方法是,@ModelAttribute將採取查詢字符串。所以,所有的數據都通過url傳遞給服務器。

至於@RequestBody,所有的數據將通過一個完整的JSON體傳遞給服務器。

5

我發現@RequestBody(也註釋類爲@RestController)更適合AJAX請求,您可以完全控制正在發出的請求的內容,並且內容以XML或JSON形式發送(因爲Jackson )。這允許內容容易地創建模型對象。相反,@ModelAttribute似乎更適合於支持表單(可能不一定是模型對象)的「命令」對象的表單。