Библиотека knigago >> Компьютеры: Языки и системы программирования >> Другие языки и системы программирования >> Spring in Action Covers Spring 5-1--11


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 2895, книга: Проповедь о падении Рима
автор: Жером Феррари

Проповедь о падении Рима Жерома Феррари — это блестящая проза, которая предлагает размышления о хрупкости цивилизации, силе амбиций и природе власти. История рассказывает о падении Римской империи глазами Кассиодора, ученого-монаха, который пережил упадок некогда великого города. Через Кассиодора Феррари исследует не только политические и военные причины падения Рима, но и более глубокие психологические и моральные факторы. Кассиодор — сложный и увлекательный персонаж. Он одновременно...

Автор неизвестен -- Компьютеры - Spring in Action Covers Spring 5-1--11

Spring in Action Covers Spring 5-1--11
Книга - Spring in Action Covers Spring 5-1--11.  Автор неизвестен -- Компьютеры  - прочитать полностью в библиотеке КнигаГо
Название:
Spring in Action Covers Spring 5-1--11
Автор неизвестен -- Компьютеры

Жанр:

Другие языки и системы программирования, Учебники и пособия: прочее, Программирование: прочее

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Spring in Action Covers Spring 5-1--11"

Хотя греческий философ Гераклит не был хорошо известен как разработчик программного обеспечения, он, казалось, хорошо разбирался в этом вопросе. Его цитируют так: "единственное неизменное-это перемены.” Это заявление отражает основополагающую истину разработки программного обеспечения. То, как мы разрабатываем приложения сегодня, отличается от того, что было год назад, 5 лет назад, 10 лет назад, и, конечно, 15 лет назад, когда первоначальная структура Spring Framework была представлена в книге рода Джонсона, Expert One-on-One J2EE Design and Development (Wrox, 2002, http://mng.bz/oVjy).

Читаем онлайн "Spring in Action Covers Spring 5-1--11". [Страница - 131]

Например, предположим, что вместо Mono<Ingredient> у вас есть Ingredient, который вы хотите отправить в теле запроса:

Ingedient ingredient = ...;

Mono<Ingredient> result = webClient

   .post()

   .uri("/ingredients")

   .syncBody(ingredient)

   .retrieve()

   .bodyToMono(Ingredient.class);

result.subscribe(i -> { ... })

Если вместо запроса POST вы хотите обновить Ingredient с помощью запроса PUT, вы вызываете put() вместо post() и соответственно корректируете путь URI:

Mono<Void> result = webClient

   .put()

   .uri("/ingredients/{id}", ingredient.getId())

   .syncBody(ingredient)

   .retrieve()

   .bodyToMono(Void.class)

   .subscribe();

Запросы PUT обычно имеют пустые полезные нагрузки ответа, поэтому вы должны указать bodyToMono() вернуть Mono типа Void. При подписке на этот Mono, запрос будет отправлен.

11.4.3 Удаление ресурсов

WebClient также позволяет удалять ресурсы с помощью метода delete(). Например, следующий код удаляет ингредиент для переданого ID:

Mono<Void> result = webClient

   .delete()

   .uri("/ingredients/{id}", ingredientId)

   .retrieve()

   .bodyToMono(Void.class)

   .subscribe();

Как и в случае PUT запросов, запросы DELETE обычно не имеют полезной нагрузки. Вы снова возвращаетесь и подписываетесь на Mono<Void>, чтобы отправить запрос.

11.4.4 Обработка ошибок

До сих пор все примеры WebClient предполагали удачное завершение; не было ответов с кодами состояния 400 или 500. Если будет возвращен любой из статусов ошибок, WebClient зарегистрирует ошибку; в противном случае, он будет молча игнорировать это.

Если вам нужно обработать такие ошибки, то вызов onStatus() можно использовать для указания того, как должны обрабатываться различные коды состояния HTTP. onStatus() принимает две функции: функцию предиката, которая используется для соответствия статусу HTTP, и функцию, которая, учитывая объект ClientResponse, возвращает Mono<Throwable>.

Чтобы продемонстрировать, как onStatus() может быть использован для создания пользовательского обработчика ошибок, рассмотрим следующее использование WebClient, целью которого является извлечение ингредиента с учетом его идентификатора:

Mono<Ingredient> ingredientMono = webClient

   .get()

   .uri("http://localhost:8080/ingredients/{id}", ingredientId)

   .retrieve()

   .bodyToMono(Ingredient.class);

До тех пор значение в идентификаторе ингредиента соответствует известному ресурсу ингредиента, то результирующий Mono опубликует объект ингредиента, когда он будет подписан. Но что произойдет, если не будет подходящего ингредиента?

При подписке на Mono или Flux, который может закончиться ошибкой, важно зарегистрировать получателя ошибок, а также получателя данных в вызове метода subscribe():

ingredientMono.subscribe(

ingredient -> {

// обрабатывать данные ингредиента

...

},

error-> {

// разобраться с ошибкой

...

});

Если ресурс ингредиента найден, то первая лямбда (потребитель данных), предоставленная subscribe(), вызывается с соответствующим объектом ингредиента. Но если он не найден, то запрос отвечает кодом состояния HTTP 404 (не найден), что приводит к тому, что вторая лямбда (потребитель ошибок) по умолчанию получает исключение WebClientResponseException.

Самая большая проблема с WebClientResponseException заключается в том, что он довольно неспецифичен относительно того, что могло пойти не так, чтобы вызвать сбой Mono. Его название предполагает, что была ошибка в ответе на запрос, сделанный WebClient, но вам нужно изучить исключение WebClientResponseException, чтобы узнать, что пошло не так. И в любом случае было бы неплохо, если бы исключение, предоставленное потребителю ошибок, было более специфичным для домена, а не для WebClient.

Добавляя пользовательский обработчик ошибок, вы можете предоставить код, который преобразует код состояния в Throwable по вашему выбору. Предположим, что вы хотите, чтобы неудачный запрос для ресурса ингредиента привел к тому, что Mono завершилось ошибкой с UnknownIngredientException. Вы можете добавить вызов onStatus() после вызова retrieve(), чтобы добиться этого:

Mono<Ingredient> ingredientMono = webClient

   .get()

   .uri("http://localhost:8080/ingredients/{id}", ingredientId)

   .retrieve()

   .onStatus(HttpStatus::is4xxClientError,

   response -> Mono.just(new UnknownIngredientException()))

   .bodyToMono(Ingredient.class);

Первый аргумент в вызове onStatus() - это предикат,

--">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.