我有服务器代码:
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(Handlers.path()
.addPrefixPath("/item", new ItemHandler())
)
.build();
server.start();
和处理程序:
private class ItemHandler implements HttpHandler {
@Override
public void handleRequest(HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
exchange.getPathParameters(); // always null
//ItemModel item = new ItemModel(1);
//exchange.getResponseSender().send(mapper.writeValueAsString(item));
}
}
我想发送请求 /item/10
并在我的参数中获取 10。如何指定路径并获取?
最佳答案
您需要一个 PathTemplateHandler
而不是 PathHandler
,请参阅:
Undertow server = Undertow.builder()
.addHttpListener(8080, "0.0.0.0")
.setHandler(Handlers.pathTemplate()
.add("/item/{itemId}", new ItemHandler())
)
.build();
server.start();
然后,在您的 ItemHandler
中:
class ItemHandler implements HttpHandler {
@Override
public void handleRequest(HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
// Method 1
PathTemplateMatch pathMatch = exchange.getAttachment(PathTemplateMatch.ATTACHMENT_KEY);
String itemId1 = pathMatch.getParameters().get("itemId");
// Method 2
String itemId2 = exchange.getQueryParameters().get("itemId").getFirst();
}
}
方法2之所以可行,是因为Undertow默认将路径中的参数与查询参数合并。 如果你不想要这种行为,你可以改用:
Handlers.pathTemplate(false)
这同样适用于 RoutingHandler
,这可能是您最终想要使用的来处理多条路径。
Handlers.rounting()
或 Handlers.routing(false)
关于java - 简单的休息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39697332/