Я пытаюсь настроить сервер REST-сервисов. Мы используем Spring Boot 1.2.1 Spring 4.1.5 и Java 8. Наши контроллеры реализуют @RestController и стандартные аннотации @RequestMapping.
Моя проблема в том, что Spring Boot устанавливает перенаправление по умолчанию для исключений контроллера в /error
. Из документов:
Spring Boot по умолчанию обеспечивает отображение /error, которое разумным образом обрабатывает все ошибки, и оно регистрируется как страница "глобальной ошибки" в контейнере сервлета.
Начиная с многолетнего опыта написания REST-приложений с Node.js, для меня это совсем не разумно. Любое исключение, которое генерирует конечная точка службы, должно возвращаться в ответе. Я не могу понять, почему вы отправили редирект тому, кто, скорее всего, является клиентом Angular или JQuery SPA, который только ищет ответ и не может или не будет предпринимать никаких действий по перенаправлению.
Я хочу настроить глобальный обработчик ошибок, который может принимать любое исключение - либо намеренно выбрасывать из метода сопоставления запросов, либо автоматически генерировать Spring (404, если не найден метод обработчика для сигнатуры пути запроса), и возвращать стандартный отформатированный ответ об ошибке (400, 500, 503, 404) клиенту без каких-либо перенаправлений MVC. В частности, мы собираемся принять ошибку, зарегистрировать ее в NoSQL с UUID, а затем вернуть клиенту правильный код ошибки HTTP с UUID записи журнала в теле JSON.
Документы были расплывчаты о том, как это сделать. Мне кажется, что вы должны либо создать свою собственную реализацию ErrorController, либо использовать ControllerAdvice каким-либо образом, но все примеры, которые я видел, все еще включают пересылку ответа на какое-то отображение ошибок, что не помогает. Другие примеры предполагают, что вам нужно будет перечислить все типы исключений, которые вы хотите обработать, вместо того, чтобы просто перечислять "Throwable" и получать все.
Может кто-нибудь сказать мне, что я пропустил, или указать мне правильное направление, как это сделать, не предлагая цепочку, с которой было бы легче иметь дело с Node.js?