2014-10-29 2 views
2

Я создаю веб-приложение Spring boot и использую аннотации для сопоставления контроллеров/URL-адресов.Spring boot - Контроллер, ловивший все URL-адреса

У меня есть несколько контроллеров, аннотированных с помощью @RequestMapping с набором значений URL (как пустых строк, так и определенных URL-адресов), которые работают нормально, например.

@Controller 
@RequestMapping("/accounts") 
class SignInController { 

    @Autowired PartyService partyService 

    @RequestMapping(value="", method = RequestMethod.GET) 
    public String signinPage(Model model) { 

Навигация по страницам/счетам правильно отображает страницу входа.

Однако, если я добавлю контроллер без значений RequestMapping, например.

@Controller 
class CustomController { 

    @RequestMapping 
    public String transform(Model model) { 

Тогда любой URL я вхожу, что не соответствует любому другому конкретному контроллеру получения обрабатывается этим контроллером (так страниц я ожидал бы 404 все просто renderthis страницы). Это ожидаемое поведение? Я не ожидал этого, и поскольку значение RequestMapping по умолчанию является пустым и является antMatcher, я бы не подумал, что он будет обрабатывать все другие URL-адреса.

Причина у меня есть этот контроллер с RequestMapping из определенного, потому что я хочу, чтобы также иметь SimpleUrlMappingHandler определенно с некоторыми явными URL, будут этим контроллер, и если я не включаю @Controller & @RequestMapping аннотации к этому контроллеру я получить сообщение об отсутствии возможности найти метод обработчика (возможно, проблема в том, что я неправильно понял детали реализации).

Должен ли мой пользовательский контроллер обрабатывать все URL-адреса? Если да, есть ли что-то, что я могу сделать, это не так, и вызывается только для явного SimpleUrlMappingHandler, который я определил?

+0

Если вы хотите «SimpleUrlHandlerMapping» тогда не использует '@ Controller', поскольку это предназначено для чего-то другого. Вместо этого реализуйте интерфейс 'Controller' для этих контроллеров. –

+0

Хорошо, попробуем это - у меня создалось впечатление, что @Controller просто аннотировал класс как компонент типа Controller для сканирования пути к классу (предположим, что без этого мне нужно будет явно определить контроллер в конфиге). Перехват контроллера все остальные URL-адреса ожидаемого поведения? – rhinds

+1

Это правда, однако 'RequestMappingHandlerMapping' обнаруживает все' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'RequestMapping ''. –

ответ

1

Как уже упоминалось в комментариях - я просто удалил @Controller аннотацию из класса, а затем явно определил контроллер в качестве @Bean в моем классе конфигурации и явно присвоенного, что отображение в SimpleUrlMappingHandler конфигурации

Смежные вопросы