Spring MVC - сопоставление запросов, два URL с двумя разными параметрами - PullRequest
9 голосов
/ 04 июля 2011

Можно ли весной иметь один метод с двумя разными URL-адресами с разными параметрами для каждого метода?

Ниже псевдокод

@RequestMethod(URL1-param1, URL2-param2)
public void handleAction(@ModelAttribute("A") A a, ...) {
}

В то же время ULR1 отображается в другом контроллере как

@RequestMethod(URL1)
public void handleAction1(@ModelAttribute("A") A a, ...) {
}

Ответы [ 3 ]

14 голосов
/ 04 июля 2011

Обновление: кажется, ваш вопрос совершенно другой.

Нет, вы не можете иметь один и тот же URL с разными параметрами на разных контроллерах. И это не имеет особого смысла - в URL указывается ресурс или действие, и его нельзя назвать одинаково в двух контроллерах (которые обозначают разные варианты поведения).

У вас есть два варианта:

  • использовать разные URL
  • использовать один метод в контроллере misc, который отправляет на разные контроллеры (которые вводятся) в зависимости от параметра запроса.

Оригинальный ответ:

Нет. Но у вас может быть два метода, которые делают одно и то же:

@RequestMethod("/foo")
public void foo(@ModelAttribute("A") A a) {
    foobar(a, null);
}

@RequestMethod("/bar")
public void bar(@ModelAttribute("B") B b) {
    foobar(null, b);
}

Если я не правильно понял, и вам нужен тот же атрибут ModelAttribute, тогда просто:

@RequestMapping(value={"/foo", "/bar"})

И, наконец, - если вам нужны другие параметры запроса, вы можете использовать @RequestParam(required=false) для отображения всех возможных параметров.

2 голосов
/ 04 июля 2011

вы можете предоставить несколько отображений для вашего обработчика, как это

@RequestMapping(value={"", "/", "welcome"})
public void handleAction(@ModelAttribute("A") A a, ...) { }

Но если вы хотите использовать разные параметры для каждого отображения, вам придется извлечь свой метод.

0 голосов
/ 04 июля 2011

как то так

@RequestMapping(value={"URL1"}, method=RequestMethod.POST)
public String handleSubmit(@ModelAttribute("A") A command, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    return helperSubmit();
}

@RequestMapping(value={"URL2"}, method=RequestMethod.POST)
public String handleSubmit(@ModelAttribute("A") A command, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    return helperSubmit();
}

private helperSubmit() {
  return "redirect:" + someUrl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...