Spring/WebClient

[WebClient] Retrieve

blockbuddy93 2024. 3. 28. 13:45

retrieve() 메서드를 사용하여 응답을 추출하는 방법을 선언할 수 있습니다. 예를 들면

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);

 

또는 바디(body)만 가져오려면

WebClient client = WebClient.create("https://example.org");

Mono<Person> result = client.get()
    .uri("/persons/{id}", id)
    .accept(MediaType.APPLICATION_JSON)
    .retrieve()
    .bodyToMono(Person.class);

 

디코딩된 객체들의 스트림을 얻으려면

WebClient client = WebClient.create("https://example.org");

Flux<Quote> result = client.get()
    .uri("/quotes")
    .accept(MediaType.TEXT_EVENT_STREAM)
    .retrieve()
    .bodyToFlux(Quote.class);

 

기본적으로, 4xx 또는 5xx 응답은 WebClientResponseException을 발생시키며, 특정 HTTP 상태 코드에 대한 서브클래스를 포함합니다. 오류 응답의 처리를 사용자 정의하려면 다음과 같이 onStatus 핸들러를 사용합니다.

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);