java - 简单的休息

标签 java rest undertow

我有服务器代码:

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/

相关文章:

rest - 使用 HATEOAS 和 Backbone.js

java - 如何将外部库添加到 Hadoop map-reduce 任务

java - 如何从 Java 打开 Windows 命名管道?

java - 从 Hibernate 中的插入中排除自动生成的标识列

java - 使用 JAXB 注释、Jackson 和 Spring 生成 JSON

rest - ColdFusion REST 404

Wildfly Undertow 中的 HTTPS 重定向

java - 使用 Java、Spring、Jsp、Extjs 获取 Wildfly 8.2.0 Final - Undertow "UT010019: Response already commited"错误

rest - 请求 io.undertow.servlet.spec.HttpServletRequestImpl 不是原始请求或包装器

Java数组整数操作