Vertx:如何在失败处理程序中获取fail()状态代码?

时间:2016-06-12 01:44:15

标签: error-handling vert.x

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

E.g。如果某些路线的处理时间过长,则TimeoutHandler会在fail(408)上调用RoutingContext来中断。 fail方法随后调用失败处理程序(如果已注册)。但是我无法找到任何方法(除了反射和取决于实现)如何在处理程序中找出它被调用的原因:

  • RoutingContext.failure()返回null
  • 状态代码似乎只在RoutingContextImpl的私有字段中设置,尚未在HttpServerResponse

2 个答案:

答案 0 :(得分:3)

您应该能够看到错误代码,因为针对该特定方案进行了单元测试:

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

您是如何注册处理程序的?和失败处理程序?

答案 1 :(得分:2)

不确定旧版本的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();
  }
});