我正在使用Java 8的可完成的Future,并且希望能够处理将来抛出的异常并将其转换为其他异常。
一旦发生异常,我尝试过的所有复合材料似乎都会短路。
例如,使用scala future,我可以执行以下操作:
scala.concurrent.Future<Object> translatedException = ask.recover(new Recover<Object>() {
@Override public Object recover(final Throwable failure) throws Throwable {
if (failure instanceof AskTimeoutException) {
throw new ApiException(failure);
}
throw failure;
}
}, actorSystem.dispatcher());
并且我希望能够在将来的Java复合块中模仿它。这可能吗?
您可以使用CompletableFuture#handle(BiFunction)
。例如
CompletableFuture<String> ask = CompletableFuture.supplyAsync(() -> {
throw new IndexOutOfBoundsException();
});
CompletableFuture<String> translatedException = ask.handle((r, e) -> {
if (e != null) {
if (e instanceof IndexOutOfBoundsException) {
throw new IllegalArgumentException();
}
throw (RuntimeException) e; // this is sketchy, handle it differently, maybe by wrapping it in a RuntimeException
}
return r;
});
如果ask
完成并带有异常,translatedException
则将完成并带有潜在转换的异常。否则,它将具有相同的成功结果值。
关于我在代码中的注释,该handle
方法期望未声明BiFunction
其apply
方法的方法抛出Throwable
。因此,lambda主体本身无法抛出Throwable
。参数e
是类型,Throwable
因此您不能throw
直接使用它。你可以将它转换为RuntimeException
,如果你知道它的那种类型的,或者你可以在一个包装它RuntimeException
和throw
那个。
问题内容: 我有一个流程,在CXF客户端上我安装了拦截器,提供程序和异常映射程序。就我而言,我正在通过拦截器捕获来自客户端的不良响应,然后我想中止cxf总线链并引发故障。不幸的是我做不到,因为在每种情况下都只记录从拦截器抛出的异常,但是主要错误(错误的json格式)会传播到异常映射器。我想避免使用异常映射器,但是我不知道怎么做。我正在使用WebClient来实现这样的拦截器: 我读到我应该实现ja
我有一个流程,在CXF客户机上,我在拦截器、提供者和异常映射器中有JAXR。在我的例子中,我通过截取程序捕捉到来自客户端的错误响应,然后我想中止cxf总线链并抛出一个错误。不幸的是,我无法做到这一点,因为在任何情况下,拦截器抛出的异常都只会被记录,但主要错误(错误的json格式)会传播到异常映射器。我想避免使用异常映射器,但我不知道如何避免。我使用WebClient实现如下拦截器: 我读到应该实现
我正在努力使用Java Spring Hibernate,我正在尝试实现Oauth2,在通过@ManyToMany将表用户连接到角色时,我不断遇到错误。我已经阅读了所有关于我的问题的答案,无论我尝试什么,我仍然得到了一个组织。冬眠映射异常。 以下是我正在努力做的事情的全部细节。 数据库结构 角色。JAVA 使用者JAVA 依赖性 问题: org.springframework.beans.fact
我收到http请求的响应,格式如下: 当我执行下面的代码时,我想将其映射到DTO中: DTO类别: 另一个类是: 当我尝试将FinalTestDt中的响应映射到类时,它会引发一个异常: WARN:org.springframework.http.converter.json.MappingJackson2HttpMessageConzer-无法评估类型[简单类型,类FinalTestDTO]的反序
首先,我对这个问题太长表示最诚挚的歉意,但老实说,我不知道如何缩短它,因为每个部分都是一个特例。诚然,我可能对此视而不见,因为我已经把头撞到墙上好几天了,我开始绝望了。 我向所有通读这本书的人表示最大的尊重和感谢。 我希望能够通过使用Jersey ExceptionMapers将Shiro的AuthenticationException及其子类映射到JAX-RS响应,Jersey例外映射器是使用G
几个月前我们开始使用Hazelcast。我们最近开始在生产环境中测试它,现在大约每周看到一次这个异常: 2020-02-11 12:10:00,084upport.invokeNoDataMemberInClusterException:无法找到调用的目标!分区所有者为空,但无法分配分区,因为集群中的所有节点都是精简成员。upport.java:467upport.java:406com.haze