2016-06-15 3 views
0

Среди нижеуказанных двух методов, которые вы вызываете первым?Какой метод вызывается для отображения запроса ниже?

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

Params посланный в запросе POST включает:

продолжается, continuesave = "истинный"

В моей локальной машине, метод 1 вызывается. Но на наших серверах prod вызывается метод 2. Каков метод, вызывающий критерии?

ответ

0

Когда я пытаюсь запустить пример, я получаю исключение java.lang.IllegalStateException: Ambiguous handler methods mapped

Кстати, вы можете изменить приоритет обработчиков Отрицая Params (saveReview не будет вызывать для обоих Params):

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

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

Вы должны были сопоставлять только с перекрытием URL. Что происходит в вашем случае - это просто undefined behavior: это может зависеть от многих вещей и не может быть надежно предсказано (это даже исключает исключение в тесте @Dekart).

Здесь, если оба PARAMS могут одновременно присутствовать в запросе, вы должны иметь только одно отображение и испытание для параметров внутри метода контроллера:

@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(){ 
    } 
Смежные вопросы