2.2. retrieve()

편집일시: 2021-04-12 14:00 조회수: 205 댓글수: 0
`retrieve()` 메소드를 사용하여, 응답을 추출하는 방법을 선언 할 수 있다. 예를 들면 아래와 같다. Java ``` 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); ``` Kotlin ``` val client = WebClient.create("https://example.org") val result = client.get() .uri("/persons/{id}", id).accept(MediaType.APPLICATION_JSON) .retrieve() .toEntity<Person>().awaitSingle() ``` 또는 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 응답은 특정 HTTP 상태 코드의 서브 클래스를 포함하는 `WebClientResponseException`이 된다. 오류 응답 처리를 사용자 정의하려면 다음과 같이 `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>() ```

이전 글 : 2.1. 구성
다음 글 : 2.3. Exchange