0

在以下两种方法中,首先调用的是哪一种?

      @RequestMapping(method = RequestMethod.POST, params="continue")
        public String save(){
                        }
      @RequestMapping(method = RequestMethod.POST, params="continuesave")
        public String saveReview(){
                        }

POST 请求中发送的参数包括:

继续, continueave="true"

在我的本地机器中,方法 1 被调用。但是在我们的产品服务器中,方法 2 被调用。方法调用标准是什么?

4

2 回答 2

0

您应该只映射到不重叠的网址。在您的情况下发生的只是未定义的行为:它可能取决于许多事情并且无法安全预测(它甚至在@Dekart 测试中引发异常)。

在这里,如果两个参数可以同时出现在一个请求中,您应该只有一个映射并测试控制器方法中的参数:

  @RequestMapping(method = RequestMethod.POST)
  public String save_req(WebRequest web) {
      Map<String,String[]> param = web.getParameterMap();
      if (...) { // condition for save
          return save();
      }
      else {
          saveReview();
      }
  }

  public String save(){
  }
  public String saveReview(){
  }
于 2016-06-15T10:02:56.340 回答
0

当我尝试运行您的示例时,出现异常java.lang.IllegalStateException: Ambiguous handler methods mapped

顺便说一句,您可以通过否定参数来更改处理程序的优先级(saveReview不会同时调用两个参数):

@RequestMapping(method = RequestMethod.POST, params="continue")
public String save(){
    ...
}

@RequestMapping(method = RequestMethod.POST, params={"continuesave"," !continue"})
public String saveReview(){
    ...
}
于 2016-06-15T09:27:24.017 回答