2.3. Exchange

편집일시: 2021-04-12 14:01 조회수: 182 댓글수: 0
`exchangeToMono()` 메소드와 `exchangeToFlux()` 메소드 (또는 Kotlin에서 `awaitExchange { }`와 `exchangeToFlow { }`)는 응답 상태에 따라 다르게 응답을 디코딩하는 등의 고급 제어가 필요한 고급 케이스에 도움이 된다. Java ``` Mono<Object> entityMono = client.get() .uri("/persons/1") .accept(MediaType.APPLICATION_JSON) .exchangeToMono(response -> { if (response.statusCode().equals(HttpStatus.OK)) { return response.bodyToMono(Person.class); } else if (response.statusCode().is4xxClientError()) { // Suppress error status code return response.bodyToMono(ErrorContainer.class); } else { // Turn to error return response.createException().flatMap(Mono::error); } }); ``` Kotlin ``` val entity = client.get() .uri("/persons/1") .accept(MediaType.APPLICATION_JSON) .awaitExchange { if (response.statusCode() == HttpStatus.OK) { return response.awaitBody<Person>() } else if (response.statusCode().is4xxClientError) { return response.awaitBody<ErrorContainer>() } else { throw response.createExceptionAndAwait() } } ``` 위를 사용하는 경우, 반환된 `Mono` 또는 `Flux`가 완료된 후에, 응답 본문을 확인하고 사용되지 않았으면 메모리와 연결 누수가 방지하기 위해 해제된다. 따라서 응답은 더 이상 다운스트림으로 디코딩 할 수 없다. 필요에 따라 응답을 해독하는 방법을 선언하는 것은 제공된 함수 달려 있다.

이전 글 : 2.2. retrieve()
다음 글 : 2.4. Request Body