Обработчики запросов для одного URL не могут быть в разных контроллерах - PullRequest
3 голосов
/ 13 сентября 2011

В моем приложении Spring mvc (Spring 3.0.2) у меня есть два разных метода контроллера для
обработки одного и того же шаблона URL, но с разными методами (GET и SET).
Если у меня они оба в одномкласс контроллера работает нормально:

@Controller
class MainController {
    @RequestMapping(value="/somepage", method=RequestMethod.GET)
    public String getMethod() {
        return "redirect:/get";
    }
    @RequestMapping(value="/somepage", method=RequestMethod.POST)
    public String postMethod() {
        return "redirect:/post";
    }
}

, но не работает, когда эти методы определены в двух разных классах контроллера.
В этом случае работает только один метод, а другой выдает ошибку 405
(метод запроса не поддерживается)

Итак, вопрос в том, почему и как я могу заставить его работать как положено?

PS: Не работает код:

@Controller
class GetController {
    @RequestMapping(value="/somepage", method=RequestMethod.GET)
    public String getMethod() {
        return "redirect:/get";
    }
}
@Controller
class PostController {
    @RequestMapping(value="/somepage", method=RequestMethod.POST)
    public String postMethod() {
        return "redirect:/post";
    }
}

Ответы [ 2 ]

7 голосов
/ 13 сентября 2011

РЕДАКТИРОВАТЬ:

Это выглядит нормально с 3.1.0.M2 , где сопоставления выполняются всем из @RequestMapping аннотации.

Так что лучшим вариантом для вас является переход на последнюю версию Spring.


В Spring 3.0.5 эта ошибка возникает при создании экземпляра bean-компонента:

java.lang.IllegalStateException: Cannot map handler 'postController' to URL path [/somepage]: There is already handler of type [class test.GetController] mapped.

Насколько я вижу из журналов и кода, бины @Controller отображаются только на URL-адреса, пока выполняется создание экземпляра, а диспетчеризация метода выполняется позже.

1 голос
/ 13 сентября 2011

Похоже, ошибка для меня. Попробуйте обновиться до версии 3.0.5 или последней версии 3.1. Если проблема не устранена, создайте проблему в весенней JIRA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...