Spring Boot 2.1.0 обслуживает index.html, только если ресурс не разрешен (SPA, реакции-маршрутизатор) - PullRequest
0 голосов
/ 20 ноября 2018

Я обслуживаю SPA, созданный с помощью create-реагировать-приложения и реагировать-маршрутизатор, используя Spring Boot 2.1.0 с этой конфигурацией

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/**/{path:[^\\.]+}")
                .setViewName("forward:/");
    }
}

По сути, это всегда служит index.html, если нетпериод в пути.Я хотел бы выровнять это с предоставленным create-реагирующим приложением .htaccess.Как сделать Spring Boot соответствующим этой функции?

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Может помочь следующий код Котлина:

@Configuration
class WebMvcConfig(val resourceProperties: ResourceProperties) : WebMvcConfigurer {

    override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
        registry.addResourceHandler("/**")
            .addResourceLocations(*resourceProperties.staticLocations)
            .resourceChain(resourceProperties.chain.isCache)
            .addResolver(FallbackPathResourceResolver())
    }

    private class FallbackPathResourceResolver : PathResourceResolver() {
        override fun resolveResource(
            request: HttpServletRequest?,
            requestPath: String,
            locations: MutableList<out Resource>,
            chain: ResourceResolverChain
        ): Resource? {
            return super.resolveResource(request, requestPath, locations, chain) ?: super.resolveResource(
                request,
                "/index.html",
                locations,
                chain
            )
        }
    }
}

Ссылка: https://jira.spring.io/browse/SPR-16788

0 голосов
/ 29 ноября 2018

Чтобы перенаправить «404: файл не найден» в «forward: /», что, я думаю, и делает .htaccess, измените конфигурацию WebMvc на ...

@Configuration
public class WebMvcConfiguration implements ErrorViewResolver
{

    @Override
    public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {
        if (status == HttpStatus.NOT_FOUND) {
            return new ModelAndView("forward:/");
        }
        return null;
    }

}
0 голосов
/ 23 ноября 2018

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

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
       registry.setOrder(Ordered.LOWEST_PRECEDENCE);
        registry.addViewController("/**").setViewName("forward:/index.html");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...