Рубрики
Без рубрики

Spring – Обработчик исключений

Para começar, сертификат, подтверждающий, что у вас нет зависимости от морского порта. <зависимость> <группа... Помечено как java, spring boot, исключение.

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”