Тип исключения работает как связанный список исключений. Я реализовал подобный метод, чтобы получить именно то исключение, которое инициировало исключения.
@ExceptionHandler({ Exception.class })
public @ResponseBody String handleException(Exception ex) {
Throwable cause = getContaExceptionIfExists(ex);
return getMessageFromException(cause.getMessage());
}
public String getMessageFromException(String message) {
return StringUtils.substringBetween(message , "interpolatedMessage='", "'");
}
public Throwable getContaExceptionIfExists(Exception ex) {
Throwable cause = ex;
do
{
if (cause instanceof ContaExcepetion)
{
return cause;
}
cause = cause.getCause();
}
while (cause != null);
return ex;
}
Этот пример кода обрабатывает все исключения в моем проекте. И я проверяю, есть ли исключения с типом "ContaExcepetion".