Использование ControllerAdvice из внешнего jar

#spring-boot #exception

#весенняя загрузка #исключение

Вопрос:

Я пытаюсь создать модуль обработки исключений, который мог бы использоваться несколькими модулями. Итак, я создаю jar, в котором есть вся логика, связанная с обработкой исключения. Я пытаюсь добавить рекомендации глобального контроллера, которые могли бы перехватывать исключения и генерировать ответ об ошибке.Проблема в том, что этот совет контроллера не вызывается. Он отлично работает, когда я пишу объявление этого совета контроллера в отдельных модулях.

Модуль обработки исключений —основной модуль ExceptionToResponseGenerator —RestController Это не работает

Модуль обработки исключений

MainModule —RestController —ExceptionToResponseGenerator Это работает

Что я делаю не так?


 package com.abc.cde.exceptionhandler.handler;

@ControllerAdvice
@Log
public class ExceptionToResponseGenerator extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders httpHeaders, HttpStatus httpStatus, WebRequest webRequest) {
        return new ResponseEntity(new ErrorDetails(new Date(), "bad", "bad"), HttpStatus.BAD_REQUEST);
    }
  

Основной класс

     @Import(IncludeExceptionHandling.class)
   @SpringBootApplication
   public class MainApplication{

    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }


}

-----------
IncludeExceptionHandling

@Configuration
@EnableAspectJAutoProxy
public class IncludeExceptionHandling {

    @Bean
    public ExceptionLoggerPointcut notifyAspect() {
        return new ExceptionLoggerPointcut();
    }
}
  

ExceptionLoggerPointcut — это исключение, обертывающее aop и повторно перемещающее его

Комментарии:

1. Отправьте код с именами пакетов, включая имя пакета вашего основного класса, помеченное @SpringBootApplication

2. @Strelok отредактировал мой пост

3. Вы не опубликовали пакет вашего основного класса. ExceptionToResponseGenerator должен находиться в подпакете пакета, в котором расположен класс MainApplication, иначе он не будет автоматически сканироваться.

4. Привет, я пытаюсь добиться того же, пожалуйста, дайте мне знать, если кто-то решил эту проблему

Ответ №1:

Похоже, проблема в отсутствии @ComponentScan. Пожалуйста, передайте имя пакета вашего кода и имя внешней библиотеки jar в аннотацию @ComponentScan, чтобы Spring мог зарегистрировать компоненты и сделать их доступными для вашего приложения.