2016-09-26 45 views
4

我有服务器验证码:简单的REST与暗流

Undertow server = Undertow.builder() 
     .addHttpListener(8080, "localhost") 
     .setHandler(Handlers.path() 
       .addPrefixPath("/item", new ItemHandler()) 
     ) 
     .build(); 
server.start(); 

和Handler:

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。如何指定路径并获取它?

回答

2

你需要一个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家中使用,因为暗潮合并参数路径与查询参数默认。 如果不希望这种行为,你可以改用:

Handlers.pathTemplate(false)

这同样适用于RoutingHandler,这可能是你要使用最终处理的多条路径是什么。

Handlers.rounting()Handlers.routing(false)

+0

安特例如对于post数据? –