下面的请求映射调用哪个方法?

时间:2016-06-15 08:26:08

标签: spring spring-mvc operator-precedence request-mapping

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

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

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

继续, continuesave = “真”

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

2 个答案:

答案 0 :(得分:0)

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

顺便说一下,你可以通过否定params来改变处理程序的优先级(saveReview不会调用这两个参数):

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

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

答案 1 :(得分: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(){
  }