Как определить обработчик по умолчанию в Spring Boot 2 - PullRequest
0 голосов
/ 23 февраля 2019

Как я могу определить обработчик по умолчанию или действие контроллера, которое будет вызываться, когда не найден никакой другой обработчик для данного URL?

Я попытался с помощью универсального шаблона /** (синтаксисis Kotlin):

@Controller
class DefaultController {

    @RequestMapping("/**")
    fun default(...) {
        ...
    }
}

Но это соответствует более высокому приоритету, чем собственные обработчики Spring, , например, статический путь к файлу, настроенный в spring.mvc.static-path-pattern, больше не доступен.Мне нужен обработчик по умолчанию, чтобы иметь самый низкий приоритет.

1 Ответ

0 голосов
/ 23 февраля 2019

Вы должны добавить свою реализацию HandlerMapping и добавить ее в список обработчиков.Вам также необходимо указать порядок обработчиков, выполняющих запросы:

@Bean
public SimpleUrlHandlerMapping simpleUrlHandlerMapping() {
    SimpleUrlHandlerMapping simpleUrlHandlerMapping
      = new SimpleUrlHandlerMapping();
    Map<String, Object> urlMap = new HashMap<>();
    urlMap.put("/**", defaultController());
    simpleUrlHandlerMapping.setUrlMap(urlMap);
    simpleUrlHandlerMapping.setOrder(1);
    return simpleUrlHandlerMapping;
}

Здесь метод defaultController() возвращает @Controller, который вы определили для данного отображения, поэтому DefaultController.Метод setOrder определяет приоритет (порядок) обработчиков, начиная с 0. Конечно, некоторые значения по умолчанию HandlerMapping также должны быть определены как @Bean.Подробнее о такой конфигурации вы можете найти здесь .

Редактировать с некоторыми мыслями из @Tobia:

Вам нужно удалить аннотацию @RequestMapping, чтобы контроллер неподобран RequestMappingHandlerMapping и реализует интерфейс AbstractController для переопределения определения контроллера в handleRequestInternal().

...