首页 > 解决方案 > 在vertx中,如何提供失败操作的结果

问题描述

我正在使用服务代理在数据库中为给定的域对象创建新记录。它委托给一个 repo,然后是一个 DAO。在插入操作失败的情况下(例如,由于违反唯一约束),似乎我只能返回 Throwable 或 String。

例如

resultHandler.handle(Future.failedFuture(insertAsyncResult.cause()));

我想返回浏览器的是一个看起来像这样的 JSON 对象......

{
    error: {
        code: "VALIDATION_ERROR",
        context: {
            validationErrors: {
                username: "The username is already in use"
            }
        }
    }
}

我还希望能够从调用堆栈中的任何层返回它。例如,验证传递给服务层的参数。

我的问题是我看不到如何在失败的未来返回 JsonObject。

标签: vert.x

解决方案


您可以Future使用带有失败代码、消息和包含额外信息的 aServiceException来失败。intJsonObject

如服务代理文档的错误处理部分所示:

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);
}

推荐阅读