在某些操作之后,从周围方面重新抛出异常到rest控制器中的ExceptionHandler
是否正常,如下所示:
@Around("execution(* *(..)) && @annotation(someAnnotation)")
public Object catchMethod(ProceedingJoinPoint point, SomeAnnotation someAnnotation) throws Throwable {
//some action
try {
result = point.proceed();
} catch (Exception e) {
//some action
throw e; //can I do this?
}
//some action
return result;
}
这是工作,但我不知道也许出于某种原因我没有这么做。
建议(其设计目的不是为了实现某种异常魔法)不应吞下adviced方法引发的异常。
是的,如果你有一个尝试抓住的要点。继续()
然后应该重新显示异常。
如果不需要在方法执行(成功)后在通知中执行某些处理,可以省略完整的异常处理。
@Around("execution(* *(..)) && @annotation(someAnnotation)")
public Object catchMethod(ProceedingJoinPoint point, SomeAnnotation someAnnotation) throws Throwable {
//some action
return point.proceed();
}
如果您需要在通知调用之后进行一些处理,那么使用try-catch-finally-bock。catch子句是可选的,但必须重新显示异常
public Object catchMethod(ProceedingJoinPoint point, SomeAnnotation someAnnotation) throws Throwable {
//some action
try {
Result result = point.proceed();
//some action that are executed only if there is no exception
} catch (Exception e) {
//some action that are executed only if there is an exception
throw e; //!!
} finally {
//some action that is always executed
}
}
问题内容: 我有一个关于Java中重新引发异常的非常简单的问题。 这是代码片段: 为什么我们需要在第一个版本中重新抛出,而第二个版本看起来更优雅?可能有什么好处,并且优先选择哪个版本? 问题答案: 你是对的。第二版更好。而且,第一个版本没有任何意义。除了异常的堆栈跟踪为“错误”之外,它的功能相同。 有“重新抛出”异常的原因如下: 如果您之前有事要做。 如果捕获一种类型的异常并抛出另一种类型的异常:
你怎么捕获一个异常,之后在另外一个线程上重新抛出?使用在标准文档18.8.5中描述的异常传递中的方法吧,那将显示标准库的魔力。 exception_ptr current_exception(); 返回一个exception_ptr 变量,它将指向现在正在处理的异常(15.3)或者现在正在处理的异常的副本(拷贝),或者有的时候在当前没有遇到异常的时候,返回值为一个空的exception_ptr变量
假设我想在收到特定异常时恢复某个值,否则返回失败的未来。我希望是这样的: 如果函数会抛出检查过的异常,我想在链式方法中处理它。我尝试过和,但都无法编译。是否为这种情况提供了任何解决方案?我知道接口是方法的参数,它不会抛出任何异常——在这种情况下,我只想返回已经失败的未来。我想找到使用Java8的解决方案。
@apiResponse似乎也没有更正响应类型。 如本问题所述,如何在swagger Codegen中处理多个响应/返回类型(204为空,400为非空等)? 我可以这样扔 但是有没有更好的方法来做到这一点呢?我只想将.getResponseBody()作为对象而不是字符串返回。 非常感谢。
这是我连接HTTP的代码。 这就是android。操作系统。NetworkOnMainThreadException 请帮忙。
问题 你在一个 except 块中捕获了一个异常,现在想重新抛出它。 解决方案 简单的使用一个单独的 rasie 语句即可,例如: >>> def example(): ... try: ... int('N/A') ... except ValueError: ... print("Didn't work") ...