在 vertx 中,如何提供操作失败的结果
In vertx, how to provide a result with a failed operation
我正在使用服务代理在数据库中为给定域对象创建新记录。它委托给一个 repo,然后委托给一个 DAO。在插入操作失败的情况下(例如,由于违反唯一约束),我似乎只能 return 一个 Throwable 或一个 String。
例如
resultHandler.handle(Future.failedFuture(insertAsyncResult.cause()));
我想 return 给浏览器的是一个看起来像这样的 JSON 对象...
{
error: {
code: "VALIDATION_ERROR",
context: {
validationErrors: {
username: "The username is already in use"
}
}
}
}
我还希望能够 return 从调用堆栈的任何层执行此操作。例如验证传递给服务层的参数。
我的问题是我不知道如何在失败的未来中 return JsonObject。
Message
class 有用于该目的的方法 fail()
。
试试这个片段 (java 8):
vertx.eventBus().consumer("SOME_ADDRESS", event -> {
try {
doSomeWork();
event.reply("OK");
} catch (Exception e) {
event.fail(FAILURE_CODE, composeJson(e));
}
});
您可以使用具有 int
失败代码的 ServiceException
、消息和包含额外信息的 JsonObject
使 Future
失败。
如服务代理文档的 Error Handling 部分所示:
if (!shoeSize.equals("9")) {
int errorCode = 78; // can be anything
JsonObject details = new JsonObject().put("shoeSize", shoeSize);
resultHandler.handle(ServiceException.fail(errorCode, "The shoe size must be 9!", details);
}
我正在使用服务代理在数据库中为给定域对象创建新记录。它委托给一个 repo,然后委托给一个 DAO。在插入操作失败的情况下(例如,由于违反唯一约束),我似乎只能 return 一个 Throwable 或一个 String。
例如
resultHandler.handle(Future.failedFuture(insertAsyncResult.cause()));
我想 return 给浏览器的是一个看起来像这样的 JSON 对象...
{
error: {
code: "VALIDATION_ERROR",
context: {
validationErrors: {
username: "The username is already in use"
}
}
}
}
我还希望能够 return 从调用堆栈的任何层执行此操作。例如验证传递给服务层的参数。
我的问题是我不知道如何在失败的未来中 return JsonObject。
Message
class 有用于该目的的方法 fail()
。
试试这个片段 (java 8):
vertx.eventBus().consumer("SOME_ADDRESS", event -> {
try {
doSomeWork();
event.reply("OK");
} catch (Exception e) {
event.fail(FAILURE_CODE, composeJson(e));
}
});
您可以使用具有 int
失败代码的 ServiceException
、消息和包含额外信息的 JsonObject
使 Future
失败。
如服务代理文档的 Error Handling 部分所示:
if (!shoeSize.equals("9")) {
int errorCode = 78; // can be anything
JsonObject details = new JsonObject().put("shoeSize", shoeSize);
resultHandler.handle(ServiceException.fail(errorCode, "The shoe size must be 9!", details);
}