2.2. retrieve()

retrieve() ๋ฉ”์„œ๋“œ๋Š” ์‘๋‹ต ๋ณธ๋ฌธ(response body)๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋‹ค์Œ ์˜ˆ์ œ๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค:

Java:

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:

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

val result = client.get()
        .uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .awaitBody<Person>()

๋˜ํ•œ ์‘๋‹ต์œผ๋กœ๋ถ€ํ„ฐ ๋””์ฝ”๋”ฉ๋œ ๊ฐ์ฒด ์ŠคํŠธ๋ฆผ์„ ์–ป์„ ์ˆ˜๋„ ์žˆ๋‹ค.

Java:

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

Kotlin:

val result = client.get()
        .uri("/quotes").accept(MediaType.TEXT_EVENT_STREAM)
        .retrieve()
        .bodyToFlow<Quote>()

๊ธฐ๋ณธ์ ์œผ๋กœ 4xx ๋˜๋Š” 5xx ์ƒํƒœ ์ฝ”๋“œ(status code)๋กœ ์‘๋‹ตํ•˜๋ฉด WebClientResponseException ํ˜น์€ WebClientResponseException.BadRequest, WebClientResponseException.NotFound ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฐ HTTP ์ƒํƒœ์— ๋งž๋Š” ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค. ๋˜ํ•œ onStatus ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ ์˜ˆ์™ธ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ์€ ๊ทธ ์˜ˆ์ œ๋‹ค:

Java:

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:

val result = client.get()
        .uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .onStatus(HttpStatus::is4xxClientError) { ... }
        .onStatus(HttpStatus::is5xxServerError) { ... }
        .awaitBody<Person>()

onStatus๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ, ์‘๋‹ต์— ๋‚ด์šฉ(body๊ฐ€)์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋ฉด onStatus ์ฝœ๋ฐฑ์—์„œ ์ด๋ฅผ ์†Œ๋น„ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฆฌ์†Œ์Šค ๋ฐ˜ํ™˜์„ ์œ„ํ•ด์„œ ์‘๋‹ต ๋‚ด์šฉ(body๊ฐ€)์ด ์ž๋™์œผ๋กœ ๋น„์›Œ์ง„๋‹ค.


๋ชฉ์ฐจ ๊ฐ€์ด๋“œ