17 Haziran 2019 Pazartesi

SpringWebFlux WebClient.RequestHeadersUriSpec Arayüzü - get, delete, head İçindir

Giriş
Şu Http işleri yapılabilir.
delete()
get()
head()
options()
işleri içindir

exchange metodu
Şöyle yaparız
webClient.get().uri(...).exchange().flatMapMany (...)
retrieve metodu
Get içindir. retrieve() metodundan sonra bodyToFlux() veya bodyToMono() çağrısı yapılarak Flux veya Mono nesnesine çevirmek gerekir.

Örnek
Şöyle yaparız
webClient.get().uri(...).retrieve().bodyToFlux(...).collectList().block();
Örnek - Blocking
Şöyle yaparız
String workerUserName = ...;
LocalDate date = ...;
// retrieve worklogs for worker and day
List<WorklogInfo> worklogsForDay = webClient.get().uri(uriBuilder -> uriBuilder
  .path("/worklogs/worker/{workerUserName}").queryParam("day", date).build(workerUserName))
.retrieve()
.bodyToFlux(WorklogInfo.class)
.collectList()
.block();
Örnek - Stream
Şöyle yaparız
Flux<DataBuffer> stream = webClient
  .get().accept(MediaType.APPLICATION_OCTET_STREAM)
  .retrieve()
  .bodyToFlux(DataBuffer.class);
Path filePath = Paths.get("filename");
AsynchronousFileChannel asynchronousFileChannel = AsynchronousFileChannel.open(filePath,
  WRITE);
return DataBufferUtils.write(stream, asynchronousFileChannel)
  .doOnNext(DataBufferUtils.releaseConsumer())
  .doAfterTerminate(() -> {
    try {
      asynchronousFileChannel.close();
    } catch (IOException ignored) { }
}).then();
onStatus metodu
HttpStatusCode değerlerine göre işlem yapabilmeyi sağlar

Örnek
Şöyle yaparız
public Mono<InventoryEntry> getByName(String name) {
  return webClient
    .get()
    .uri(uriBuilder -> uriBuilder
                        .path("/by-name")
                        .queryParam("title", "{name}")
                        .build(name))
    .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
    .retrieve()
    .onStatus(httpStatusCode -> HttpStatus.NOT_FOUND == httpStatusCode,
      clientResponse -> Mono.empty())
    .onStatus(HttpStatusCode::is5xxServerError, this::handleServerError)
    .bodyToMono(InventoryEntry.class)
    .retryWhen(retrySpec);
}

Mono<ExternalCommunicationException> handleServerError(ClientResponse clientResponse) {
  ExternalCommunicationException returnedException = new ExternalCommunicationException(
    "Communication with inventory client failed due to server error",
    clientResponse.statusCode().value()
  );
  return Mono.error(returnedException);
}

uri metodu
Şöyle yaparız.
client.get().uri(".../{name}", name).accept(MediaType.APPLICATION_OCTET_STREAM)
  ....

Hiç yorum yok:

Yorum Gönder