Spring catch all route for index.html

后端 未结 6 1932

I\'m developing a spring backend for a react-based single page application where I\'m using react-router for client-side routing.

Beside the index.html page the back

6条回答
  •  情话喂你
    2020-11-29 00:26

    I have a Polymer-based PWA hosted inside of my Spring Boot app, along with static web resources like images, and a REST API under "/api/...". I want the client-side app to handle the URL routing for the PWA. Here's what I use:

    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
        /**
         * Ensure client-side paths redirect to index.html because client handles routing. NOTE: Do NOT use @EnableWebMvc or it will break this.
         */
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            // Map "/"
            registry.addViewController("/")
                    .setViewName("forward:/index.html");
    
            // Map "/word", "/word/word", and "/word/word/word" - except for anything starting with "/api/..." or ending with
            // a file extension like ".js" - to index.html. By doing this, the client receives and routes the url. It also
            // allows client-side URLs to be bookmarked.
    
            // Single directory level - no need to exclude "api"
            registry.addViewController("/{x:[\\w\\-]+}")
                    .setViewName("forward:/index.html");
            // Multi-level directory path, need to exclude "api" on the first part of the path
            registry.addViewController("/{x:^(?!api$).*$}/**/{y:[\\w\\-]+}")
                    .setViewName("forward:/index.html");
        }
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/**").addResourceLocations("classpath:/webapp/");
        }
    }
    

    This should work for Angular and React apps as well.

提交回复
热议问题