Может ли аннотация метода обрабатывать ошибки, выдаваемые этим методом? - PullRequest
0 голосов
/ 13 декабря 2018

Я недавно начал изучать аннотации и хочу знать, может ли аннотация метода обрабатывать ошибки, сгенерированные этим методом?Или узнать код этого исключения / ошибки.

PS, если это возможно, следующий шаг - повторить этот метод в зависимости от кода ошибки

PSS. Я знаю о Spring Retryable, но я могуНе используй это.Я пытался найти информацию о моем вопросе в Google, но я не нашел.

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Вы, вероятно, больше думаете о Аспектно-ориентированном программировании .

Значение: Java-аннотации не предназначены для добавления функциональности "в" методы.Это маркеры, которые «оцениваются» каким-либо компонентом (либо компилятором во время компиляции, либо некоторой структурой во время выполнения) и запускают активность в этом компоненте.

Чтобы реально манипулировать поведением метода (например, добавить код автоматической трассировки / регистрации), вам нужно что-то вроде AOP.Конечно, вся цель аннотаций компилятора заключается в генерации кода на основе аннотации. Project Lombok является хорошим примером для таких вещей: вы помещаете аннотации в ваш исходный код, а скомпилированный файл класса содержит много вещей, вставленных Lombok во время компиляции.

0 голосов
/ 14 декабря 2018

На самом деле, одна из основных вещей в ООП - это IoC (инверсия управления). Нам необходимо соблюдать этот подход при создании профессионального приложения.

https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring

Например,мы можем написать блоки try / catch в каждом классе проекта. Это плохая практика.вместо этого мы можем использовать аннотацию @ControllerAdvice.Просто определите конкретное исключение, JVM перехватит его во всех классах / запросах для вас. Это IoC.

Вы можете перехватывать исключения в каждом запросе в проекте, если вы определяете исключение в классе, который вы надеваетеаннотация @ControllerAdvice.

Простой пример использования:

@ControllerAdvice
@RestController
public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public final ResponseEntity httpRequestMethodNotSupportedException(Exception ex, WebRequest request) {
        ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "there isn’t an URL like that",
                request.getDescription(false));
        return new ResponseEntity<>(exceptionResponse, HttpStatus.METHOD_NOT_ALLOWED);

    } 

Вот полезная ссылка о @ControllerAdvice:

https://medium.com/@jovannypcg/understanding-springs-controlleradvice-cd96a364033f

0 голосов
/ 13 декабря 2018

Аннотация сама по себе ничего не делает.Это просто для маркировки кода.У вас должны быть некоторые обработчики, которые сканируют ваши классы и реагируют на аннотации.

Большинство фреймворков уже имеют обработчики и сканеры, поэтому разработчик включает в себя соответствующую фреймворк, добавляет надлежащие аннотации, и благодаря этому фреймворки будут выполнять некоторыеработа для разработчика или приложения.

Кстати, для обработки ошибок я рекомендую использовать простой прокси-сервер: Вызвать метод в блоке try catch другого класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...