Para começar, сертификат, подтверждающий, что у вас нет зависимости от морского порта.
org.springframework.boot spring-boot-starter-web
Лечение Падрао
Обработка ошибки padraodo Spring обеспечивает out-of-the-box, который реагирует в зависимости от Тип содержимого .
- Casa o Content-Type sea text/html o tratamento de erro ira encaminhar o запрос на uma página de erro Страница с ошибкой белой метки . Como você adicione um mapping specifico param “/ошибка” então o Spring utilizará esse cara ao invés do страница с ошибкой белой метки.
- В случае, если Cotent-type seaSON o tratamento de erro retornará um objecto com as seguintes propriedades: ошибка, сообщение, путь, статус e временная метка .
Страницы ошибок можно отключить, добавив следующую строку в ваш .свойства .
server.error.whitelabel.enabled=false
Обработку По Индивидуальному Заказу
Spring предоставляет очень простой способ и чистой, что позволяет нам обрабатывать исключения, которые происходят во время выполнения метода сделайте nosso controller MVC/REST. Мы можем обрабатывать и возвращать JSON или пересылки для конкретной страницы об ошибке.
С Помощью @ResponseStatus
Первый способ позволяет нам обрабатывать только возвращение нашего контроллера. Нет исключения adicionamos a anotação @ResponseStatus вопрос о разрешении настройки статуса HTTP e o заголовок |/причина сделайте ответ nosso. Response and возвращается с помощью стандартного лечения (error page или JSON по умолчанию), если не был задан págian или обработчика.
@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "We can't handle your request =(") public class CustomException extends RuntimeException { }
@RestController @RequestMapping("/api") class HelloController { @GetMapping("custom") public String customResponseFailure() { throw new CustomException(); } }
Quando una exception do tipo CustomException для lana do tratamento padrão de erro do Spring entrará em ação mas utilizará o nosso HTTP status e adicionará o заголовок причина ответа нет.
Usando @ExceptionHandler
Второй способ наиболее интересен-это разводить метод лечения специфическими исключениями. Эта форма нос позволяет создать ум способ, чтобы убить exception надлежащим образом, и то вперед конкретной страницы или вернуться сущности настроены.
Если мы замечаем, метод контроллера, так что все исключения этого контроллера, которые не были они с аннотацией @ResponseStatus будут обрабатываться нее, но если мы хотим создать один обработчик для всех контроллеров, нам нужно создать Advice.
У нас есть два типа Advice: ControllerAdvice e Рекомендации RestController . В ControllerAdvice следует семантики @Controller, то в конце лечения он перенаправляет на каналы значение. В RestControllerAdvice именно в @RestController, то возвращает объект, сериализованный непосредственно в response.
Контроллер com @ExceptionHandler
@Controller @RequestMapping("/web") public class PageController { @GetMapping("customerrorpage") public String customErrorPage() { throw new NumberFormatException("We can't format your number"); } @ExceptionHandler(NumberFormatException.class) public ModelAndView handleNumberFormatException(NumberFormatException nfex) { ModelAndView model = new ModelAndView("custom_error"); model.addObject("errorMessage", nfex.getMessage()); return model; } }
Classe com ControllerAdvice e RestController Советы
@ControllerAdvice public class CustomPageExceptionHandler { @ExceptionHandler(NumberFormatException.class) public ModelAndView handleNumberFormatException(NumberFormatException nfex) { ModelAndView model = new ModelAndView("custom_error"); model.addObject("errorMessage", nfex.getMessage()); return model; } } @RestControllerAdvice public class CustomJsonExceptionHandler { // podemos usar também @ResponseStatus @ResponseStatus(code = HttpStatus.BAD_REQUEST) @ExceptionHandler(IllegalStateException.class) public String handleInvalidStateException(IllegalStateException rex, HttpServletResponse response) { System.err.println("Hey dev! We got an illegal state: " + rex.getMessage()); response.addHeader("Reason", rex.getMessage()); return "Sorry, we got some problem =("; } }
Основные информационные ресурсы, доступные по ссылкам [2] и [3].
Exemplo
Конструкция с примерами: GitHub
Записка:
- При использовании Spring Ботт с custom error page помните, упаковывать с WAR и добавить депс tomcat (см [1])
Ссылки:
- [1] https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-jsp-limitations
- [2] https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
- [3] [2] https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
Оригинал: “https://dev.to/wesleyegberto/spring-exception-handler-3i79”