You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.7 KiB
120 lines
2.7 KiB
[[webflux-client-retrieve]] |
|
= `retrieve()` |
|
|
|
The `retrieve()` method can be used to declare how to extract the response. For example: |
|
|
|
[tabs] |
|
====== |
|
Java:: |
|
+ |
|
[source,java,indent=0,subs="verbatim,quotes",role="primary"] |
|
---- |
|
WebClient client = WebClient.create("https://example.org"); |
|
|
|
Mono<ResponseEntity<Person>> result = client.get() |
|
.uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON) |
|
.retrieve() |
|
.toEntity(Person.class); |
|
---- |
|
|
|
Kotlin:: |
|
+ |
|
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"] |
|
---- |
|
val client = WebClient.create("https://example.org") |
|
|
|
val result = client.get() |
|
.uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON) |
|
.retrieve() |
|
.toEntity<Person>().awaitSingle() |
|
---- |
|
====== |
|
|
|
Or to get only the body: |
|
|
|
[tabs] |
|
====== |
|
Java:: |
|
+ |
|
[source,java,indent=0,subs="verbatim,quotes",role="primary"] |
|
---- |
|
WebClient client = WebClient.create("https://example.org"); |
|
|
|
Mono<Person> result = client.get() |
|
.uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON) |
|
.retrieve() |
|
.bodyToMono(Person.class); |
|
---- |
|
|
|
Kotlin:: |
|
+ |
|
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"] |
|
---- |
|
val client = WebClient.create("https://example.org") |
|
|
|
val result = client.get() |
|
.uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON) |
|
.retrieve() |
|
.awaitBody<Person>() |
|
---- |
|
====== |
|
|
|
To get a stream of decoded objects: |
|
|
|
[tabs] |
|
====== |
|
Java:: |
|
+ |
|
[source,java,indent=0,subs="verbatim,quotes",role="primary"] |
|
---- |
|
Flux<Quote> result = client.get() |
|
.uri("/quotes").accept(MediaType.TEXT_EVENT_STREAM) |
|
.retrieve() |
|
.bodyToFlux(Quote.class); |
|
---- |
|
|
|
Kotlin:: |
|
+ |
|
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"] |
|
---- |
|
val result = client.get() |
|
.uri("/quotes").accept(MediaType.TEXT_EVENT_STREAM) |
|
.retrieve() |
|
.bodyToFlow<Quote>() |
|
---- |
|
====== |
|
|
|
By default, 4xx or 5xx responses result in an `WebClientResponseException`, including |
|
sub-classes for specific HTTP status codes. To customize the handling of error |
|
responses, use `onStatus` handlers as follows: |
|
|
|
[tabs] |
|
====== |
|
Java:: |
|
+ |
|
[source,java,indent=0,subs="verbatim,quotes",role="primary"] |
|
---- |
|
Mono<Person> result = client.get() |
|
.uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON) |
|
.retrieve() |
|
.onStatus(HttpStatus::is4xxClientError, response -> ...) |
|
.onStatus(HttpStatus::is5xxServerError, response -> ...) |
|
.bodyToMono(Person.class); |
|
---- |
|
|
|
Kotlin:: |
|
+ |
|
[source,kotlin,indent=0,subs="verbatim,quotes",role="secondary"] |
|
---- |
|
val result = client.get() |
|
.uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON) |
|
.retrieve() |
|
.onStatus(HttpStatus::is4xxClientError) { ... } |
|
.onStatus(HttpStatus::is5xxServerError) { ... } |
|
.awaitBody<Person>() |
|
---- |
|
====== |
|
|
|
|
|
|
|
|
|
|