Spring Boot: обработка ошибок
По умолчанию Spring Boot предоставляет отображение /error, которое разумным образом обрабатывает все ошибки и регистрируется как “global” страница ошибок в контейнере сервлета. Для машинных клиентов он генерирует ответ JSON с подробной информацией об ошибке, статусе HTTP и сообщении об исключении. Для клиентов браузера есть представление ошибок “whitelabel”, которое отображает те же данные в формате HTML (чтобы настроить его, добавьте View, который разрешает ошибку). Чтобы полностью заменить поведение по умолчанию, вы можете реализовать ErrorController и зарегистрировать определение компонента этого типа или добавить компонент типа ErrorAttributes, чтобы использовать существующий механизм, но заменить содержимое.
BasicErrorController может использоваться в качестве базового класса для пользовательского ErrorController. Это особенно полезно, если вы хотите добавить обработчик для нового типа контента (по умолчанию используется специальная обработка text/html и предоставление запасного варианта для всего остального). Для этого расширьте BasicErrorController, добавьте открытый метод с @RequestMapping, который имеет атрибут produces, и создайте bean-компонент нового типа.
Вы также можете определить класс, аннотированный @ControllerAdvice, чтобы настроить документ JSON для возврата для определенного контроллера и/или типа исключения, как показано в следующем примере:
@ControllerAdvice(basePackageClasses = AcmeController.class)
public class AcmeControllerAdvice extends ResponseEntityExceptionHandler {
@ExceptionHandler(YourException.class)
@ResponseBody
ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) {
HttpStatus status = getStatus(request);
return new ResponseEntity<>(new CustomErrorType(status.value(), ex.getMessage()), status);
}
private HttpStatus getStatus(HttpServletRequest request) {
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
if (statusCode == null) {
return HttpStatus.INTERNAL_SERVER_ERROR;
}
return HttpStatus.valueOf(statusCode);
}
}
В предыдущем примере, если YourException генерируется контроллером, определенным в том же пакете, что и AcmeController, вместо представления ErrorAttributes используется представление JSON для CustomErrorType POJO.
Читайте также:
- Spring Boot: разработка веб-приложений
- Spring Boot: автоконфигурация Spring MVC
- Spring Boot: пользовательские сериализаторы и десериализаторы JSON
- Spring Boot: статический контент
- Spring Boot: сопоставление путей и согласование контента
- Spring Boot: шаблонизаторы
Комментарии
Отправить комментарий