gpt4 book ai didi

java - 使用 Vert.x 处理请求中间件中抛出的错误

转载 作者:行者123 更新时间:2023-11-30 05:48:37 24 4
gpt4 key购买 nike

假设我有一些中间件并引发错误:

public class JWTHandler implements Handler<RoutingContext> {

public void handle(RoutingContext ctx) {
throw new Error("How can I capture this error and send a response.")
ctx.next();
}
}

如何使用一些错误处理中间件捕获它?这是一个全局错误处理程序,但它不能引用任何请求/响应对。

vertx.createHttpServer()
.exceptionHandler(ctx -> {

// I cannot access the request that may have caused the error here
log.error("In the exception handler.");
log.error(ctx.getCause());

})

我唯一能猜测的是:

public class ErrorHandler implements Handler<RoutingContext> {

public void handle(RoutingContext ctx) {
try{
ctx.next();
}
catch(Exception e){
ctx.response().end("We messed up.");
}
}
}

但我怀疑这个想法是否正确?正确的做法是什么?

也许其中一个或两个就足够了?

router.route().failureHandler(ctx -> {
ctx.response().end("We failed here!");
});

router.route().last().handler(ctx -> {
ctx.response()
.setStatusCode(404)
.end("404 - route/resource could not be found.");
});

最佳答案

我认为,正确的方法是在抛出异常时使用ctx.fail()

public class JWTHandler implements Handler<RoutingContext> {
public void handle(RoutingContext ctx) {
ctx.fail(new Error("How can I capture this error and send a response.");
}
}

然后您可以添加一个 failerHandler 并使用 ctx.failure() 访问异常

router.route().failureHandler(ctx -> {
ctx.response().end(
ctx.failure().getMessage()
);
});

编辑:

failureHandler 还捕获像您一样抛出的异常:

public class JWTHandler implements Handler<RoutingContext> {
public void handle(RoutingContext ctx) {
throw new Error("How can I capture this error and send a response.")
ctx.next();
}
}

关于java - 使用 Vert.x 处理请求中间件中抛出的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54395083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com