我有一个方法,现在我正在使用try catch方法处理异常。
我有一个自定义异常方法来处理错误。
现在我必须将此异常处理更改为运行时异常。
代码:
public class AppException extends RuntimeException {
private static final long serialVersionUID = -8674749112864599715L;
public AppException() {
}
public AppException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public AppException(String message, Throwable cause) {
super(message, cause);
}
public AppException(String message) {
super(message);
}
public AppException(Throwable cause) {
super(cause);
}
}
使用try catch处理的方法。
@Transactional(readOnly = false)
@Override
public String save(StagingDocument stagingData)
throws AppException {
String enrichObjectId = null;
try {
EnrichDocument document = getEnrichDocument(stagingData);
EnrichDocument enrichPayload = enrichStagingDocumentRepository
.save(document);
enrichObjectId = enrichPayload.getId().toString();
} catch (Exception e) {
logger.error("EXCEPTION IN SAVETOENRICHDOCUMENT METHOD: " + e);
throw new AppException (e.getMessage(), e.getCause());
}
return enrichObjectId;
}
以上方法是AppException extends
Exception class
。
现在我需要根据runtime exception
处理更改保存方法。
问题:
如何在不使用try catch
方法的情况下更改此方法?
如果尝试捕获不存在exception
如何处理?
答案 0 :(得分:0)
如果您不使用try-catch
块,则不会捕获原始Exception
。如果它是RuntimeException
,则不会出现编译错误,因为RuntimeExeption
不需要被捕获。如果发生Exception
,则只会从save()
方法抛出它(它将被委派)。
如果原始Exception
不是RuntimeException
并且您不想使用try-catch
块,则可以声明save()
方法抛出Exception
块AppException
1}}但在这种情况下,它显然不是AppException
的实例,而是原始的异常本身。
顺便说一下,如果您创建e
,其原因应该是e.getCause()
而不是e.getCause()
。如果您将AppException
作为e
的原因,那么save()
本身就会丢失。您可能还想添加自定义错误消息,而不是使用原始异常的消息。
摘要:如果您希望AppException
方法在内部遇到Exception
时抛出try-catch
的实例,则不能在没有一个Exception
块,你必须抓住它(里面遇到AppException
)并像你一样将它包装在一个新的{{1}}中。
答案 1 :(得分:0)
RuntimeException
不必在方法签名中声明,如果你想删除try / catch块,你可以这样做:
@Transactional(readOnly = false)
@Override
public String save(StagingDocument stagingData) {
String enrichObjectId = null;
EnrichDocument document = getEnrichDocument(stagingData);
EnrichDocument enrichPayload = enrichStagingDocumentRepository
.save(document);
enrichObjectId = enrichPayload.getId().toString();
return enrichObjectId;
}
当没有尝试/捕获时 - 例外没有得到处理"它是级联,直到更高级别处理它或直到最高级别存在该程序(使用RuntimeException
)。
答案 2 :(得分:0)
Runtime exceptions
。如果您使用AppException
作为已检查的例外,则仍然无需放置try/catch
,因为您已使用方法签名中的throws
处理了它。调用save()
的方法必须处理AppException
。