AccountControllerに次のようなメソッドがあります
@RequestMapping(method = { RequestMethod.POST, RequestMethod.PUT })
public String update(@ModelAttribute Account account) {
this.getAccountDao().save(account);
return "redirect:/users/account/";
}
私は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を除いて、ほぼ正確なデータを送信する必要があるという点で非常に似ています。コントローラからこの同じメソッドを使用し、POSTとPUTの両方に同じjspを使用できるようにしたいのですが、モデルに応じて、アカウントが保存または更新されます。