SPRING BOOT - обрабатывать исключение HttpClientErrorException с помощью @ControllerAdvice - PullRequest
0 голосов
/ 14 мая 2018

У меня есть приложение Spring Boot Java. Существует класс обслуживания, который выдает «401 Несанкционированный» HttpClientErrorException, поскольку токен доступа, используемый в приложении, истек. Я хочу обработать это исключение глобально, для которого я использовал аннотацию @ControllerAdvice. Ошибка:

Причина: org.springframework.web.client.HttpClientErrorException: 401 не авторизован

Класс:

@Slf4j
@EnableWebMvc
@ControllerAdvice(basePackages = Service.class)
public class HttpClientErrorHandler{
    @ExceptionHandler(HttpClientErrorException.class)
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public String errorHandle(HttpClientErrorException e) {
        log.error("log HttpClientErrorException: ", e);
    return "HttpClientErrorException_message";
   }
}

Поскольку исключение было вызвано в классе обслуживания, я упомянул его конкретно в basePackages. Вся конфигурация для программы указана в файле application.yml. Я не использовал конфигурацию XML. Я не понимаю, почему аннотация @ControllerAdvice не работает. Программа по-прежнему выдает исключение. Может кто-нибудь объяснить?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Я также столкнулся с подобной проблемой,

, попробуйте добавить @Order(Ordered.HIGHEST_PRECEDENCE) ниже @ControllerAdvice.

Мы добавляем его, чтобы получить приоритет над стандартным значением Spring DefaultHandlerExceptionResolver.Чтобы понять, почему мы добавляем его, прочитайте этот ответ .Также не нужно указывать базовые пакеты, он будет рассматривать все пакеты по умолчанию.

Для обработки исключений любого другого типа, вы можете включить ниже существующего обработчика исключений для HttpClientErrorException, который вы уже написали,

@ExceptionHandler(Exception.class)
public Strring handleAnyExceptions(Exception ex) {
    return "your message";
} 

Надеюсь, это поможет!

0 голосов
/ 14 мая 2018

@ControllerAdvice(basePackages = Service.class)

Исключение относится к классу @Controller, и @ControllerAdvice должно применяться к контроллеру, поэтому вы должны установить basePackageClasses для вашего пакета контроллера вместо вашего пакета услуг.

По умолчанию @ControllerAdvice применяется ко всем контроллерам, поэтому вы можете удалить basePackageClasses, если вы не хотите сузить контроллер, советующий

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