РЕДАКТИРОВАТЬ: я прочитал связанную тему (Получение UndeclaredThrowableException вместо моего собственного исключения) осторожно, но это не отвечает на мой вопрос - этот билет предлагает объявить проверенное исключение в перехваченном методе, что я уже сделал.
Я пытаюсь использовать механизм Spring Retry и хочу создать собственное проверенное исключение в методе разрешения, но оно не работает с UndeclaredThrowableException. Вот что я делаю:
- Я объявил свое пользовательское исключение RuntimeException (которое указывало бы, что мне нужно повторить попытку):
public class RestCallRetryException extends RuntimeException
- Затем я выбрасываю это исключение времени выполнения при реализации следующего метода:
@Retryable(value = RestCallRetryException.class, maxAttempts = 2) InquiryResponse postInquiry(InquiryRequest inquiryRequest) throws RestCallException;
- Я объявил метод повторной попытки для его обработки:
@Recover InquiryResponse recover(RestCallRetryException e) throws RestCallException;
- Как вы можете видеть, у меня также есть RestCallException, которое является проверенным исключением, выбрасываемым при восстановлении:
public class RestCallException extends Exception
Я выбрасываю RestCallException в реализации recovery(RestCallRetryException e) и получаю UndeclaredThrowableException. Я не понимаю, почему это происходит. Я бы понял, что это так, если бы я не объявил, что метод, отмеченный @Retryable (postInquiry), выдает RestCallException, но все это объявлено, как вы можете видеть в моих фрагментах кода. Что мне здесь не хватает?
RestCallException
( потому что он не может объявить это) - person Lino   schedule 29.03.2021