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"))))); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Spring4.0 MVC请求json数据报406错误的解决方法
- java – 为什么`–var`和`var-1`的工作方式不同?
- Java – 寻找比PriorityQueue更快的东西
- java – 调用者阻塞直到getFoo()有一个值准备好了?
- javafx-2 – 如何设置JavaFX默认外观
- 是否可以在没有元素数量的情况下在Java中构造数组?
- java – 如何通过Apache Camel调用RESTful服务?
- java – 尝试从SQLiteOpenHelper检索数据时出现Android Nul
- java – 我不能在同一行上同时拥有两个关键字:private fin
- java – 如何避免库jar中的资源冲突?