Kri*_*ish 3 java spring-boot sonarlint
有人可以帮我解释为什么 SonarLint 会显示这个:
要么记录此异常并处理它,要么使用一些上下文信息重新抛出它。
对于下面的代码。
public static <T> T getObjectFromJson(final Object jsonString, final Class<T> valueType) {
T object = null;
if (jsonString != null) {
try {
object = MAPPER.readValue(jsonString.toString(), valueType);
} catch (IOException io) {
log.error(ERROR_LOG_STR + " in method getObjectFromJson(). Exception Message={}, Exception Stack ={}",
io.getMessage(), io);
throw new ServiceException(ErrorMessages.JSON_SERIALIZATION_ERROR, io.getCause());
}
}
return object;
}
Run Code Online (Sandbox Code Playgroud)
这是关于...或,请参阅 Sonar 的规则规范 RSPEC-2139:
\n\n\n异常应该被记录或重新抛出,但不能两者都记录
\n
为了遵守规则,请决定:
\n try {\n object = MAPPER.readValue(jsonString.toString(), valueType);\n } catch (IOException io) {\n log.error(ERROR_LOG_STR + " in method getObjectFromJson(). Exception Message={}, Exception Stack ={}",\n io.getMessage(), io);\n }\nRun Code Online (Sandbox Code Playgroud)\n try {\n object = MAPPER.readValue(jsonString.toString(), valueType);\n } catch (IOException io) {\n throw new ServiceException(ErrorMessages.JSON_SERIALIZATION_ERROR, io); // would use the full exception, not only the wrapped .getCause()\n }\nRun Code Online (Sandbox Code Playgroud)\n您还可以另外登录全局或本地错误处理拦截器,例如 Spring@ControllerAdvice带注释的错误处理程序。
Throwable大多数记录器允许在错误级别记录时传递 a 。\n例如使用Slf4j:log.error(ERROR_LOG_STR + " in method getObjectFromJson(): " + io.getMessage(), io)
也可以看看:
\nRSPEC-1166:异常处理程序应保留原始异常
\n该规范功能于 2018 年 11 月 2 日在版本 5.9 中得到解决,Java 的实现于 2019 年 2 月 15 日在版本 5.11 中得到修复。
\n\xe2\x9a\xa0\xef\xb8\x8f 仅部分修复:\n标记的重复\n和obourgain\ 的答案不能完全解决这里的双重情况:
\n应对 RSPEC-1166 的类似问题:
\n