2016-06-12 55 views
1

如何在失败处理程序中检索传递给RoutingContext.fail(int)的状态代码(使用Route.failureHandler注册)?Vertx:如何在失败处理程序中获取失败()状态码?

E.g.如果某些路线的处理时间过长,则可以通过TimeoutHandler来中断,该TimeoutHandlerRoutingContext上调用fail(408)fail方法随后调用失败处理程序(如果已注册)。但是我无法找到任何方式(除了依赖于实现反射&)如何找出处理程序本身为什么它被称为:

  • RoutingContext.failure()回报null
  • 状态代码似乎是公开的,只有设置的RoutingContextImpl领域,尚未HttpServerResponse

回答

2

你应该能够看到错误代码,因为是针对特定场景单元测试:

router.route(path).handler(rc -> { 
    rc.fail(400); 
}).failureHandler(frc -> { 
    assertEquals(400, frc.statusCode()); 
    frc.response().setStatusCode(400).setStatusMessage("oh dear").end(); 
}); 

你怎么注册你的处理程序?和失败处理程序?

+0

使用'Route.handler()'和'Route.failureHandler()',完全按照你的榜样。 – czerny

+0

根据测试,这应该工作,为了完成你使用什么版本?请注意,3.3.0将在几天后出来 –

+0

我正在使用3.2.1。 – czerny

1

不知道关于旧版本Vert.x的,而是从3.0.0向上:

eventBus.send("some.address", "some value", event -> { 
    if (event.succeeded()) { 
    System.out.println("Received reply: " + event.result().body()); 
    } else { 
    ReplyException cause = (ReplyException) event.cause(); 
    String failMessage = cause.getMessage(); 
    int failCode = cause.failureCode(); 
    } 
}); 
相关问题