gpt4 book ai didi

java - undertow 的路由模板格式

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:54 25 4
gpt4 key购买 nike

有没有关于undertow.routing模板格式的文档?我想像这样设置处理程序:

/ or /index.html -> Use handler 1
Anything else -> Use handler 2

这个我试过了,没用:

Handlers.routing()
.add("GET", "/", handler1)
.add("GET", "/index.html", handler1)
.add("GET", "/*", handler2)

有什么想法吗?

最佳答案

有几种方法可以实现这一点:

1) 基本方法:PathHandler

Handlers.path()
.addExactPath("/path1", handler1)
.addPrefixPath("/path2", handler2);

handler1 将仅在 /path1(或 /path1/)上匹配。

handler2 将匹配 /path2/path2/ 以及以 /path2/ 开头的所有其他内容>.

2)路由方式:RoutingHandler

如果您使用 RoutingHandler,您可以选择轻松地从路径中提取变量。例如,这对于构建 REST API 很方便(请注意 RoutingHandler 上方便的 get 方法的用法)。

Handlers.routing().get("/{test}/*", exchange -> {
PathTemplateMatch pathMatch = exchange.getAttachment(PathTemplateMatch.ATTACHMENT_KEY);
String itemId1 = pathMatch.getParameters().get("test"); // or exchange.getQueryParameters().get("test")
String itemId2 = pathMatch.getParameters().get("*"); // or exchange.getQueryParameters().get("*")
}))

* 参数可以匹配任何内容(例如 a/b/c 的路径)。为了使用 * 参数,您需要一个之前在路由模板中定义的实际命名参数(在我的示例中为 test)。

请注意,您的路由模板中定义的参数将与查询参数 (exchange.getQueryParameters()) 一起可用。这是默认行为。如果您不想要它,您可以像这样创建路由处理程序:Handlers.routing(false).get(...) 然后从交换的附件中检索参数。

对于任何与您的路由处理程序不匹配的路由,您可以使用 RoutingHandler 中可用的 fallbackHandler

Handlers.routing()
.get("/", handler1)
.get("/index.html", handler1)
.setFallbackHandler(handler2);

默认情况下,fallbackHandler 仅返回带有 404 状态代码的空响应主体。 handler2 将匹配任何其他请求,而不仅仅是 GET 请求。

综合示例

您当然可以结合使用 PathHandlerRoutingHandler 来满足您的需要。

这是一个更现实的设置的小例子:

Undertow.builder().addHttpListener(8080, "0.0.0.0")
.setHandler(Handlers.path()

// REST API path
.addPrefixPath("/api", Handlers.routing()
.get("/customers", exchange -> {...})
.delete("/customers/{customerId}", exchange -> {...})
.setFallbackHandler(exchange -> {...}))

// Redirect root path to /static to serve the index.html by default
.addExactPath("/", Handlers.redirect("/static"))

// Serve all static files from a folder
.addPrefixPath("/static", new ResourceHandler(
new PathResourceManager(Paths.get("/path/to/www/"), 100))
.setWelcomeFiles("index.html"))

).build().start();

此应用程序还提供文件系统中的静态文件。这对于为 javascript 应用程序或静态 html 文件提供服务很方便。

关于java - undertow 的路由模板格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39742014/

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