Spring/WebClient

[WebClient] Exchange

blockbuddy93 2024. 3. 28. 14:06

exchangeToMono() 및 exchangeToFlux() 메서드(또는 Kotlin에서 awaitExchange { } 및 exchangeToFlow { })는 응답 상태에 따라 응답을 다르게 디코딩해야 하는 고급 케이스에 유용합니다.

 

Mono<Person> entityMono = client.get()
        .uri("/persons/1")
        .accept(MediaType.APPLICATION_JSON)
        .exchangeToMono(response -> {
            if (response.statusCode().equals(HttpStatus.OK)) {
                return response.bodyToMono(Person.class);
            } else {
                // 에러로 전환
                return response.createError();
            }
        });


위와 같이 사용할 때 반환된 Mono 또는 Flux가 완료된 후에는 응답 본문이 확인되고 소비되지 않으면 메모리 및 연결 누수를 방지하기 위해 해제됩니다. 따라서 응답은 하류로 더 이상 디코딩할 수 없습니다. 필요한 경우 제공된 함수가 응답을 어떻게 디코딩할지 선언해야 합니다.