gpt4 book ai didi

java - 如何使用带有 Quarkus 的 Vertx 路由器将所有未找到的路由重定向到 index.html?

转载 作者:行者123 更新时间:2023-12-02 12:51:24 25 4
gpt4 key购买 nike

我有一个 Quarkus 应用程序,它全部打包了一个 Angular SPA(捆绑在 JAR 中)。 Quarkus 提供后端 API 路由供前端使用。当构建 Quarkus 应用程序时,Angular 应用程序构建被复制到目标中的 META-INF/resources 路径。

我没有使用 JAX-RS 来注册我的路由。相反,我直接在 fun onRouterReady(@Observes router: Router) 方法内以编程方式在 Vertx 路由器上注册它们。

我希望将任何无法识别的路由(作为 Vertx 注册路由或作为静态资源)重定向到 index.html,以便我的 Angular 应用程序可以从它的所有路线。不幸的是,我还没有找到任何方法来做到这一点。

我不知道所有 Quarkus 路由是如何工作的。我怀疑 Quarkus 本身正在使用 Servlet(或者可能是 Vertx)注册一些路由,因为 index.html 在根目录上得到了正确的服务,但我的身份验证根目录可以防止在没有身份验证的情况下加载。

我尝试了通过搜索找到的各种东西,例如:

router.route("/*").handler(StaticHandler.create())
router.route().handler({ context: RoutingContext ->
context.reroute("index.html)
})

这里的想法是创建一个静态处理程序,然后是一个 catch-all,它将请求重新写入 index.html,以便它随后被静态处理程序捕获,但这只是导致无限循环(静态处理程序似乎无法找到 index.html)。

我也曾尝试通过 JAX-RS 添加过滤器(我想避免这样做),但这也不起作用。

一定有某种方法可以设置它,我确信 Quarkus 代码确实在某处起作用,但我找不到它。非常感谢任何想法。

最佳答案

您需要在应用程序范围类中的某处观察 Router 并设置 404 错误处理程序以重定向到 index.html

public void init(@Observes Router router) {
router.errorHandler(404, routingContext -> {
routingContext.response().setStatusCode(302).putHeader("Location", "/index.html").end();
});
}

P.S 使用 routingContext.reroute("index.html"); 也可以工作,但它会保持原来的路径(例如你写了 /testabc,它会显示您的 html 文件,但路径不会是 /index.html)。如果您确实需要这个,请将其替换为 errorHandler

中的选项

关于java - 如何使用带有 Quarkus 的 Vertx 路由器将所有未找到的路由重定向到 index.html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61197844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com