我有这个单声道代码:
return Mono.just(operation)
.map(this::validate)
.then(execute(operation))
.doOnError(ValidationException.class, this::handleValidationException)
.doOnError(Exception.class, this::handleException);
当validate方法抛出ValidationException时,将同时调用handleValidation异常和handleException。我只希望调用handleValidationException。为什么会发生这种情况?如何防止handleException被调用?
当验证方法抛出ValidationException时,handleValidationException和handleException都被调用。我只期望调用handleValidationException。为什么会发生这种情况?
…因为<code>ValidationException</code>也是通过继承的<code>Exception的实例,并且<code>doOnError()</code>不会“吞下”异常(因此它仍然会传播到下一个<code>doOnError()调用。
有几种不同的方法可以处理它——我的首选方法通常是使用< code>onErrorResume()来接收异常,并在处理完异常后返回一个空的publisher:
//...
.then(execute(operation))
.onErrorResume(ValidationException.class, e -> {
this.handleValidationException();
return Mono.empty();
})
.doOnError(Exception.class, ...)
…这将确保错误永远不会“失败”,如果这是你想要的行为的话。
我还想到了另外两种方法,但是,我不太喜欢它们。您可以在第二个doOnError()
中使用谓词显式检查它是否不是ValidationException
:
.doOnError(e -> !(e instanceof ValidationException), ...)
...或者您也可以在一个块中处理所有异常,只需检查其中的类型:
.doOnError(e -> {
if(e instanceof ValidationException) {
}
else {
}
})
问题内容: 我正在学习React,并按照本教程创建了一个简单的Tic- Tac-Toe游戏,您可以在CodePen中查看。 对于在Board组件的函数内部返回的Square组件的属性中的箭头功能如何工作,我感到困惑。同样,我拥有的游戏组件也同样如此。我以为我可以不用箭头功能(就像一样)来编写它,但这会中断游戏。 问题答案: 期望功能。箭头函数没有自己的功能; 使用封闭执行上下文的值。箭头功能可替代
我正在使用Netty 4.1.0.final,但我面临一个问题,即消息不能通过出站处理程序传递。我发布了一个示例程序,其中有一个入站和一个出站处理程序。入站处理程序在ChannelHandlerContext中使用writeAndFlush,我的理解是它应该将消息转发到管道中可用的第一个出站处理程序。为了简单起见,忽略了内存管理。 引导代码 入站处理程序代码 } 出站处理程序代码 } 输出 信息T
我正在为Spring MVC中的异常处理开发示例演示应用程序。我正在尝试使用@ControllerAdvice处理异常 我遵循了本链接中描述的步骤。 但是当我运行我的应用程序时,我得到了以下错误 以下是我正在学习的课程 应用程序异常。JAVA 控制器类 ApplicationExceptionController。JAVA 下面是GlobalExceptionHandler类 GlobalExce
问题内容: 我的主活动调用了我的子活动中的处理程序。该处理程序由某些Runnable 的子类使用,但我无法对其进行管理。现在,在这种情况下,我需要先删除它们,然后再完成“活动”(以某种方式调用,但仍然会反复调用)。无论如何,要从处理程序中删除所有回调吗? 问题答案: 以我的经验,这非常有效! 在removeCallbacksAndMessages的文档中,它说… 删除obj为令牌的回调和已发送消息
我想知道向从ExchangeFilterFunction返回的单声道添加功能是否会应用于返回的最终单声道。基本上,我希望通过将一些关注点移出客户机类并添加到ExchangeFilterFunctions中来清理一些客户机代码,我可以将这些关注点添加到客户机中,但我的情况与单个调用有点不同。
我正在运行vertx的本地实例。路由器将我的请求重定向到具有以下处理程序的工作顶点: processRequest函数接受请求主体,调用两个外部服务,聚合响应,然后返回给客户端。 当我点击上面的API时,我的请求超时。为执行我的请求而分配的工作线程池中的线程将永远在Tag1被阻止。进一步调试后,我发现Tag2中调用的应答处理程序没有被调用。 ServiceVerticle(ServiceVerti