Java SpringWebFlux将所有404页重定向到index.html

Java SpringWebFlux将所有404页重定向到index.html,java,spring-boot,netty,spring-webflux,Java,Spring Boot,Netty,Spring Webflux,我无法找到以下问题的答案: 如何将所有未处理的No controller url重定向到index.html? 我找到了以下指南 但这无助于重定向其他未映射的url,如:,这将导致404页面 如果我添加以下bean,它将覆盖所有现有控制器,并且没有api可访问 @Bean public RouterFunction<ServerResponse> indexRouter(@Value("classpath:/public/index.html") final Res

我无法找到以下问题的答案: 如何将所有未处理的No controller url重定向到index.html? 我找到了以下指南

但这无助于重定向其他未映射的url,如:,这将导致404页面

如果我添加以下bean,它将覆盖所有现有控制器,并且没有api可访问

    @Bean
    public RouterFunction<ServerResponse> indexRouter(@Value("classpath:/public/index.html") final Resource indexHtml) {
        return route(GET("/**"), request -> ok().contentType(MediaType.TEXT_HTML).bodyValue(indexHtml));
    }
对于这个问题有已知的解决方案吗? 我可以使用nginx将所有无法识别的路径重定向到根路径,但这很难看,我真的不想仅仅为了重定向而添加另一层

谢谢:

如果您使用的是RouterFunction,则所有路由器功能都将从上到下读取,这意味着它非常类似于交换机机箱

这意味着您可以在底部放置一个默认案例,将客户端重定向到特定端点

因此,在您的示例中,/slash将返回index.html,然后与/**匹配的GET函数将返回硬斜杠的重定向/

如果您使用RouterFunction,则所有路由器函数都将从上到下读取,这意味着它非常类似于交换机案例

这意味着您可以在底部放置一个默认案例,将客户端重定向到特定端点


因此,在您的示例中,/slash将返回index.html,然后与/**匹配的GET函数将返回重定向到硬斜杠/

如果您使用路由器函数,则所有路由器函数都将从上到下读取,这意味着它非常类似于交换机案例,您可以在底部放置一个默认案例,这将把客户端重定向到特定的端点。所以/slash将返回您的索引,然后与/**匹配的get函数将返回一个指向硬斜杠的重定向。@ThomasAndolf我将其作为一个答案发布-我只是键入了类似的内容:-哈哈,好的@MichaelBerry@ThomasAndolf如果将它们放在不同的类中会怎么样:是否应该在bean中创建依赖关系?要确保最后加载?这是一种方法,您也可以使用@Order annotation,我认为有几种方法,但我不是真正的舒尔!试试看如果您使用的是路由器函数,那么所有的RouterFunction都将从上到下读取,这意味着它非常类似于交换机案例,您可以在底部放置一个默认案例,将客户端重定向到特定的端点。所以/slash将返回您的索引,然后与/**匹配的get函数将返回一个指向硬斜杠的重定向。@ThomasAndolf我将其作为一个答案发布-我只是键入了类似的内容:-哈哈,好的@MichaelBerry@ThomasAndolf如果将它们放在不同的类中会怎么样:是否应该在bean中创建依赖关系?要确保最后加载?这是一种方法,您也可以使用@Order annotation,我认为有几种方法,但我不是真正的舒尔!试试看我是否可以扩展此解决方案以将所有(但仅404个)页面重定向到index.html?换句话说,让对现有静态资源的请求为它们服务,只有在没有控制器和静态资源的情况下才重定向到index.html?如果我理解正确,理论上你应该首先列出所有的硬链接,最后还有一个默认的catch all case/**我可以扩展这个解决方案,将404页重定向到index.html吗?换句话说,让对现有静态资源的请求为它们服务,只有在没有控制器和静态资源的情况下才重定向到index.html?好吧,如果我理解正确的话,理论上你应该首先列出所有的硬链接,然后最后有一个默认的全包情况/**