Vertx:如何在失败处理程序中获取 fail() 状态代码?
Vertx: How to get fail() status code in failure handler?
状态码如何传给RoutingContext.fail(int)
be retrieved in failure handler (registered using Route.failureHandler
)?
例如如果某些路由的处理时间太长,它可能会被 TimeoutHandler
中断,它在 RoutingContext
上调用 fail(408)
。 fail
方法随后调用失败处理程序(如果已注册)。但是我找不到任何方法(除了反射和取决于实现)如何在处理程序本身中找出它被调用的原因:
RoutingContext.failure()
returns null
- 状态代码似乎只在
RoutingContextImpl
的私有字段中设置,尚未在 HttpServerResponse
中设置
您应该能够看到错误代码,因为有针对该特定场景的单元测试:
router.route(path).handler(rc -> {
rc.fail(400);
}).failureHandler(frc -> {
assertEquals(400, frc.statusCode());
frc.response().setStatusCode(400).setStatusMessage("oh dear").end();
});
您如何注册您的处理程序?和故障处理程序?
不确定 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();
}
});
状态码如何传给RoutingContext.fail(int)
be retrieved in failure handler (registered using Route.failureHandler
)?
例如如果某些路由的处理时间太长,它可能会被 TimeoutHandler
中断,它在 RoutingContext
上调用 fail(408)
。 fail
方法随后调用失败处理程序(如果已注册)。但是我找不到任何方法(除了反射和取决于实现)如何在处理程序本身中找出它被调用的原因:
RoutingContext.failure()
returnsnull
- 状态代码似乎只在
RoutingContextImpl
的私有字段中设置,尚未在HttpServerResponse
中设置
您应该能够看到错误代码,因为有针对该特定场景的单元测试:
router.route(path).handler(rc -> {
rc.fail(400);
}).failureHandler(frc -> {
assertEquals(400, frc.statusCode());
frc.response().setStatusCode(400).setStatusMessage("oh dear").end();
});
您如何注册您的处理程序?和故障处理程序?
不确定 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();
}
});