Java SpringMVC3RESTPUT和POST用于更新和保存

Java SpringMVC3RESTPUT和POST用于更新和保存,java,rest,spring-mvc,Java,Rest,Spring Mvc,我的AccountController中有一个方法,如 @RequestMapping(method = { RequestMethod.POST, RequestMethod.PUT }) public String update(@ModelAttribute Account account) { this.getAccountDao().save(account); return "redirect:/users/account/"; } 我正在使用org.springfram

我的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.hiddenhttmpmethodfilter,因此我的视图有一个隐藏的表单字段,如-

<form:form method="POST" modelAttribute="account">
      <input type="hidden" name="_method" value="PUT" />
....

....
现在我的问题是,控制器如何知道何时创建新帐户或更新它,或者如何知道请求是POST还是PUT?在我看来,它总是看起来像是要被放置

除了GET和POST,我不喜欢使用任何东西。控制器不需要关心是否需要创建新的或更新它。如果表单有一个隐藏的accountid字段,服务可以确定调用哪个DAO方法

编辑
如果这只是一个PUT请求,那么我需要为POST创建一个新的jsp。不幸的是,这两个请求非常相似,因为它们需要提交几乎准确的数据,除了帐户id。我希望能够从控制器中使用相同的方法,并对POST和PUT使用相同的jsp,这取决于模型-帐户被保存或更新。

控制器不知道您是否创建或更新实体,它只知道该方法响应的
RequestMethod
s

指定的隐藏字段和正在使用的
hiddenhttmpmethodfilter
导致
PUT
成为HTTP方法,当过滤器更改请求中的方法时,控制器可以看到该方法。(根据"基本法")

结果,浏览器使用
POST
将其数据传输到服务器,然后运行
Filter
并将请求中的方法更改为
PUT
,因此对于
Filter
后面的应用程序,请求似乎是与
PUT
一起发送的

我不认为非常相似的代码有什么问题,只是将相似的行为考虑到另一个方法中。。例如:

@RequestMapping(method = { RequestMethod.POST})
public String update(@ModelAttribute Account account) {
     // do POST specific things..

      // and common operations
      commonOperation();
}

@RequestMapping(method = { RequestMethod.PUT })
public String updateWithPut(@ModelAttribute Account account) {
      // do PUT specific things...

      // and common operations
      commonOperation();
}

// code that put and post methods have in common
private void commonOperation() {
 // a lot of common code
 // that needs to be done
}

如果这永远不会是POST请求,那么控制器不需要“POST”动词,因为它不会是POST请求。这将回答问题的第一部分。现在我需要能够同时拥有POST和PUT。如何使用HiddenHttpMethodFilter实现这一点。我无法创建单独的页面。隐藏字段指定应用程序可见的HTTP方法。这是每个表单标签的特定配置,因此您可以根据需要和隐藏字段发送一个带有POST的表单,另一个带有PUT的表单。hmmm。。我会等待更多的答案。我想我是用正确的方法做的,但我不理解我的难题中缺少的一部分。我想你需要明确你的要求,你想实现什么,你的问题是什么?当前的代码应该处理POST和PUT。。至少我认为应该是这样。我需要确定这是否有效。这看起来确实是正确的做法,因为不必为POST或PUT创建单独的jsp。我想这从我的问题上是很清楚的。我将等待其他答案来验证这一点。