Как перехватить все исключения Spring / Spring Boot 2.x? - PullRequest
0 голосов
/ 16 марта 2019

Я построил свое приложение Spring boot 2.x с помощью этой демонстрации: https://spring.io/guides/gs/spring-boot/ Проблема, с которой я столкнулся, заключается в том, что, когда в загрузке Spring / Spring возникает исключение, оно выводится на стандартный вывод. Я не хочу этого Я хочу захватить их и сделать другую обработку, такую ​​как регистрация их. Я могу перехватить исключения из моего кода, но не могу перехватить исключения загрузки Spring / Spring. Следовательно, как мне перехватить все исключения Spring / Spring Boot 2.x, чтобы я мог их обработать? Есть ли простой способ сделать это, как универсальный ловец исключений? Может кто-нибудь показать мне какой-нибудь код?

Мой код:

  1. Example.java

    пример пакета;

    import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

    @ SpringBootApplication Открытый класс Пример расширяет SpringBootServletInitializer {

    public static void main (String [] args) генерирует исключение {

    SpringApplication.run(Example.class, args);
    

    }

    } ​​

  2. ExampleController.java

    пример упаковки;

    import org.springframework.stereotype.Controller; import org.springframework.http.HttpStatus; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult;

    import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.CrossOrigin;

    import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.servlet.ModelAndView;

    @ контроллер открытый класс ExampleController {

    @ GetMapping ("/ пример") публичный пример ModelAndView () { Данные MyData = новые MyData (); data.setName ( "Пример"); data.setVersion ( "1.0"); * +1038 *

    ModelAndView model = new ModelAndView("page");
    model.addObject("page", data);
    
    return model;
    

    }

    }

  3. GeneralExceptionHandler.java

    пример упаковки;

    import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler;

    @ ControllerAdvice класс GeneralExceptionHandler {

    @ExceptionHandler(Exception.class)
    public void handleException() {
    
      System.out.println("Exception handler");
    
    }
    

    }

  4. MyData.java

    пример пакета;

    импорт ломбок.Данные;

    @ Data открытый класс MyData {

    личное строковое имя; приватная строковая версия;

    }

  5. page.jsp

    $ {Page.name} $ {Page.version123}

1 Ответ

0 голосов
/ 16 марта 2019

Вы можете использовать аннотацию @ExceptionHandler для перехвата определенного исключения, для этого вы можете просто аннотировать метод внутри вашего контроллера с помощью @ExceptionHandler и предоставить ему конкретное исключение, например:

@ExceptionHandler(DataIntegrityViolationException.class)
public void handleException(){
 // do some thing here
}

Ограничением этого способа является то, что он будет обрабатывать только исключения, выданные @RequestMapping, где объявлено @ExceptionHandler. Чтобы избежать этого ограничения, вы можете использовать рекомендацию контроллера , которая позволяет вам использовать точно такие же методы обработки исключений, но применять их ко всему приложению, например, используя рекомендацию контроллера:

@ControllerAdvice
class GeneralExceptionHandler {

    @ExceptionHandler(DataIntegrityViolationException.class)
    public void handleException() {
        // Do some thing here
    }
}

подсказка: если вы хотите перехватить все отмеченные исключения, вы можете использовать @ExceptionHandler (Exception.class)

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