加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java.util.concurrent.CompletionStage – 如何处理异常?

发布时间:2020-12-15 02:15:05 所属栏目:Java 来源:网络整理
导读:我正在尝试找到更好的方法来处理以下代码中的多个异常: public CompletionStageResult getRepositoryInfo(String repositoryOwner,String repositoryName) {return repositoryInfoService.getRepositoryInfo(repositoryOwner,repositoryName) .handle((repo
我正在尝试找到更好的方法来处理以下代码中的多个异常:

public CompletionStage<Result> getRepositoryInfo(String repositoryOwner,String repositoryName) {
return repositoryInfoService.getRepositoryInfo(repositoryOwner,repositoryName)
        .handle((repositoryInfo,ex) -> {
            if (repositoryInfo != null) {
                return ok(Json.toJson(repositoryInfo));
            } else {
                if (ex.getCause() instanceof GithubRepoNotFoundException) {
                    return notFound(Json.toJson("repo not found"));
                } else {
                    return internalServerError(Json.toJson("internal error"));
                }
            }
        });
}

该程序获取github repo名称和所有者并返回一些基本信息(如全名,描述,克隆URL等). repositoryInfoService.getRepositoryInfo()返回对象或抛出GithubRepoNotFoundException或GithubApiException.这个例子看起来很丑陋,我对此并不满意.另一个选择是重新抛出ex.getCause()但它也很糟糕.

解决方法

有些库可以为if语句和instanceof提供更流畅的API.

使用javaslang matcher和java的可选你的处理程序看起来像

.handle((repositoryInfo,ex) -> ofNullable(repositoryInfo)
    .map(info -> ok(toJson(info)))
    .orElse(Match(ex.getCause()).of(
        Case(of(GithubRepoNotFoundException.class),notFound(toJson("repo not found")),Case(any(),internalServerError(toJson("internal error")))));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读