Как перенаправить на файл ресурсов по умолчанию на 404 для определенного пути - PullRequest
0 голосов
/ 06 июля 2019

Я интегрирую одностраничное приложение в проект Spring Boot. Контекст пользовательского интерфейса (SPA): http://localhost:8080/ui/

Контекст самого приложения Spring Boot: http://localhost:8080/. Контроллеры имеют другой контекст, который не имеет ничего общего с контекстом пользовательского интерфейса.

В одном случае пользовательский интерфейс меняет адресную строку браузера на URL, о котором сервер не знает, но не отправляет запрос на сервер. После такой вещи, если я обновлю страницу, сервер ответит 404. Однако мне нужно вернуть страницу index.html по умолчанию.

Пример: я перехожу на http://localhost:8080/ui/, Интерфейс изменяет это на http://localhost:8080/ui/mainpage. Я обновляю страницу и получаю 404.

Я нашел похожий вопрос , но я бы хотел сделать это немного по-другому, затем ответил там.

Мне нужно вернуть ресурс по умолчанию (index.html), когда есть запрос на http://localhost:8080/ui/**,, если запрос сделан на http://localhost:8080/context1/blablabla, Я хотел бы вернуть 404.

После отладки и поиска в Google, я пришел к следующему решению:


    @Configuration
    public static class WebConfig implements WebMvcConfigurer {

        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry
                    .addResourceHandler("/ui/**")
                    .addResourceLocations("/ui/")
                    .resourceChain(false)
                    .addResolver(new PathResourceResolver() {
                        @Override
                        protected Resource getResource(String resourcePath, Resource location) throws IOException {
                            Resource resource = super.getResource(resourcePath, location);
                            return Objects.isNull(resource) ? super.getResource("index.html", location) : resource;
                        }
                    });
        }

        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/ui/").setViewName("index.html");
        }
    }


Подход здесь заключается в том, чтобы вручную добавить PathResourceResolve и переопределить его метод getResource, поэтому, когда ресурс равен нулю, вызовите ресурс index.html. Таким образом, я могу быть уверен, что я верну страницу по умолчанию только тогда, когда будет сделан запрос к http://localhost:8080/ui/**, а все остальные запросы вернутся как обычно 404.

Я не думаю, что это правильное решение, для меня это выглядит как взломать. Я подумал, что, возможно, у обработчиков ресурсов есть какой-то конфиг, такой как ресурс по умолчанию, но я ничего не нашел по этому поводу.

У меня вопрос, как это сделать правильно? Ценю любые предложения.

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