我有一個像Spring MVC的3 REST PUT和POST進行更新和保存
@RequestMapping(method = { RequestMethod.POST, RequestMethod.PUT })
public String update(@ModelAttribute Account account) {
this.getAccountDao().save(account);
return "redirect:/users/account/";
}
在我的AccountController的方法我使用org.springframework.web.filter.HiddenHttpMethodFilter所以我的觀點有一個隱藏的表單字段作爲 -
<form:form method="POST" modelAttribute="account">
<input type="hidden" name="_method" value="PUT" />
....
現在的問題是如何控制器知道何時創建一個新帳戶或更新,或它如何知道如果請求是POST或PUT?對我來說,它總是看起來像是PUT。
我只是不喜歡使用除GET和POST之外的任何東西。控制器無需關心是否需要創建新的或更新它。如果表單具有隱藏的帳戶ID字段,則該服務可以確定要調用的DAO方法。
編輯 如果這只是一個PUT請求,那麼我需要爲POST創建一個新的jsp。不幸的是,兩個請求都非常相似,因爲他們需要幾乎準確的數據才能提交,除了帳號ID。我希望能夠從控制器和相同的jsp使用同一個方法來執行POST和PUT,並根據模型 - 帳戶被保存或更新。
如果這是永遠不會成爲一個POST請求控制器不需要「POST」動詞,因爲它不會是一個。這將回答問題的第一部分。現在我需要能夠同時擁有POST和PUT。我怎麼用HiddenHttpMethodFilter來做到這一點。我無法創建單獨的頁面。 – Mukus
隱藏字段指定哪個HTTP方法對應用程序可見。這是一種按表單標籤的特定配置,因此您可以根據您的需要和隱藏字段,使用POST發送一個表單,使用PUT發送另一個表單。 – burna
嗯..我會等待更多的答案。我認爲我正在以正確的方式去做,但不瞭解我的謎題缺失的一塊。 – Mukus