Sonarqube 将 AOP Throwable 视为一个问题

问题描述 投票:0回答:3

Sonarqube 定义了一条规则:永远不应该抛出通用异常(即抛出专用异常而不是使用通用异常。) 然而 AOP ProceedingJoinPoint 总是抛出泛型 Throwable 并且通常我对异常根本不感兴趣,只是从这样的方法中抛出它:

@Around(...)
public void someMethod(ProceedingJoinPoint point) throws Throwable {
    // do something...
    point.proceed();
    // do something else...
}

显然这违反了上述Sonarqube规则。我真的必须用 try catch 包装它并记录可抛出的东西吗?这方面的最佳实践是什么?

java sonarqube aop
3个回答
4
投票

您可以安全地将此违规标记为“误报”并输入描述性评论。这种误报应该很少见,以便您可以单独对待它们,并采取相应的行动 - AoP API 是一个很好的例子,遗留的和/或写得很糟糕的库是另一个例子。但请勿将文件添加到排除项,因为您会失去声纳分析中的其他规则


0
投票
Throwable

或普通

Exception
本身的库。因此,当您处理此异常时,总会违反 sonarqube 的规则。

但是你绝对应该捕获这个异常并用它做一些事情。您究竟用它做什么取决于捕获它的应用程序层。如果它是一个较低的异常,那么您可能希望将其包装到您自己的适当的异常中。考虑到所有其他更高层都不想知道您使用哪些依赖项。如果您自己是高层,那么您可以记录它或为用户返回正确的消息。我希望这有帮助。


0
投票

public void someMethod(ProceedingJoinPoint point) { try { point.proceed(); } catch (Throwable t) { if (t instanceof SQLException sqlException) { throw sqlException; } else if (t instanceof RuntimeException runtimeException) { throw runtimeException; } else { // your own exception throw new customException("Error during method execution", t); } }

	
© www.soinside.com 2019 - 2024. All rights reserved.