Как обрабатывать исключения в REST-сервисе на основе spring-webflux - PullRequest
0 голосов
/ 03 сентября 2018

Я создаю REST-сервис, используя spring-webflux. Мне нужно ответить пользовательским сообщением об ошибке json, когда запрошенный путь не найден или когда произошла какая-либо другая внутренняя ошибка сервера.

У меня есть класс GeneralExceptionHandler, который реализует ErrorWebExceptionHandler.

И у меня есть боб для GeneralExceptionHandler следующим образом.

@Bean
@Order(-2)
public ErrorWebExceptionHandler errorWebExceptionHandler() {
    return new GeneralExceptionHandler();
}

Таким образом, мой метод-дескриптор (public Mono<Void> handle(ServerWebExchange serverWebExchange, Throwable throwable)) в GeneralExceptionHandler вызывается в случае ошибок, таких как запрошенный путь не найден.

И я могу использовать следующее для отправки пользовательского кода состояния http.

serverWebExchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);

Но я не могу понять, как отправить пользовательский JSON в качестве ответа.

Прежде всего, это правильный способ обработки общих ошибок в Spring webflux? Если да, как я могу ответить с помощью пользовательских объектов JSON?

1 Ответ

0 голосов
/ 04 сентября 2018

Spring Boot предоставляет для этой цели интерфейс ErrorWebExceptionHandler; он расширяет довольно общий низкий уровень WebExceptionHandler от Spring Framework.

С WebExceptionHandler вы действительно застряли в работе с низкоуровневыми концепциями, потому что это подразумевается как общий механизм обработки ошибок.

Существует несколько способов настройки процесса обработки ошибок в Spring Boot:

  • Создайте свой собственный компонент ErrorAttributes и добавьте / удалите данные из карты ошибок, которая предоставляется представлениям HTML или отображается как JSON
  • Если вы хотите еще больше разобраться с обработкой ошибок, вы можете расширить AbstractErrorWebExceptionHandler, что дает вам все строительные блоки для рендеринга HTML / тел ответов
  • Если вам нужен полный контроль, вы можете реализовать ErrorWebExceptionHandler, но вам потребуется аналогичная настройка инфраструктуры для рендеринга высокоуровневых концепций, таких как представления или сериализация тел ответов
...