我正在使用服务代理在数据库中为给定的域对象创建新记录。它委托给一个仓库,然后委托给一个DAO。在插入操作失败的情况下(例如由于违反唯一约束),似乎我只能返回Throwable或String。
E.G。
resultHandler.handle(Future.failedFuture(insertAsyncResult.cause()));
我想返回浏览器的是一个看起来像这样的JSON对象...
{
error: {
code: "VALIDATION_ERROR",
context: {
validationErrors: {
username: "The username is already in use"
}
}
}
}
我还希望能够从调用堆栈的任何层返回它。例如验证传递给服务层的参数。
我的问题是我看不到如何在失败的将来返回JsonObject。
答案 0 :(得分:2)
您可以通过Future
失败ServiceException
,其中该int
包含失败代码,消息和包含额外信息的JsonObject
。
如服务代理文档的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);
}
答案 1 :(得分:0)
Message
类为此具有方法fail()
。
尝试以下代码段(java 8):
vertx.eventBus().consumer("SOME_ADDRESS", event -> {
try {
doSomeWork();
event.reply("OK");
} catch (Exception e) {
event.fail(FAILURE_CODE, composeJson(e));
}
});