Введение
У меня есть пользовательская реализация ErrorController
для обработки всех исключений и создания пользовательского сообщения об ошибке:
@RestController
public class CustomErrorController implements ErrorController {
@RequestMapping("/error")
public ResponseEntity handleError(HttpServletRequest request) {
HttpStatus status = HttpStatus.valueOf((Integer) request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE));
String body = ... // Code to calculate the body based on the request
return ResponseEntity.status(status.value()).body(body);
}
@Override
public String getErrorPath() {
return "/error";
}
}
Описание проблемы
Однако это такжеразрешает доступ к пути /error
, который я хотел бы отключить.
При попытке доступа к https://localhost:8443/error
метод HttpStatus.valueOf()
выбрасывает NullPointerException
, поскольку код состояния не может быть извлечен,В результате создается внутренняя ошибка сервера (500), которая запускается через мой пользовательский контроллер, создавая пользовательский ответ об ошибке 500.
Временное исправление
В качестве обходного пути я могу проверитьесли атрибут кода состояния существует, и обрабатывать этот случай отдельно.Но это обходной путь, а не фактическое исправление .
Вопрос
Я хотел бы отключить отображение /error
с внешнегодоступ.Если попытаться, результатом должен быть Not Found (404), который затем запускается через мой пользовательский контроллер.
Требуется ли @RequestMapping("/error")
или это может быть реализовано по-другому?
Правки
Версия Spring Boot 2.1.2.RELEASE
Свойство server.error.whitelabel.enabled
установлено в false
.Кажется, проблема не связана с этим.