WebClient 사용 예제 코드

HTTP 통신을 하기 위한 라이브러리 입니다.

리액티브 타입의 송/수신을 하여 Non-Blocking 통신을 지원합니다.

필요할 때 편하게 보기 위해 예제 위주로 기록 합니다.

WebClinet 기본 설정 적용하여 Bean 으로 등록하는 방법

@Configuration
public class WebClientConfig {
    @Bean
    public WebClient.Builder webClientBuilder() {
        return WebClient.builder()
                        .baseUrl("https://sample.io")
                        .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
    }
}

GET 요청을 보내는 예시

WebClient webClient = WebClient.create("https://sample.io");
Mono<String> result = webClient.get()
                               .uri("/info")
                               .retrieve()
                               .bodyToMono(String.class);
result.subscribe(System.out::println);

POST 요청을 보내는 예시

WebClient webClient = WebClient.create("https://sample.io");
Mono<String> result = webClient.post()
                               .uri("/info")
                               .bodyValue("data")
                               .retrieve()
                               .bodyToMono(String.class);
result.subscribe(System.out::println);

에러 처리 예시

WebClient webClient = WebClient.create("https://sample.io");
Mono<String> result = webClient.get()
                               .uri("/info")
                               .retrieve()
                               .bodyToMono(String.class)
                               .onErrorResume(WebClientResponseException.class,
                                              e -> Mono.just("Error: " + e.getStatusCode()));
result.subscribe(System.out::println);

WebClient builder 주요 옵션

  • baseUrl(String baseUrl): 모든 요청에 사용할 기본 URL을 설정합니다.
  • defaultHeader(String header, String... values): 모든 요청에 추가할 기본 헤더를 설정합니다.
  • defaultHeaders(Consumer<HttpHeaders> headersConsumer): 모든 요청에 추가할 기본 헤더를 설정합니다.
  • defaultCookie(String cookie, String... values): 모든 요청에 추가할 기본 쿠키를 설정합니다.
  • defaultCookies(Consumer<MultiValueMap<String, String>> cookiesConsumer): 모든 요청에 추가할 기본 쿠키를 설정합니다.
  • defaultRequest(Consumer<WebClient.RequestHeadersSpec<?>> defaultRequest): 모든 요청의 기본값을 설정합니다.
  • filter(ExchangeFilterFunction filterFunction): HTTP 요청/응답을 처리하는 필터를 추가합니다.
  • filters(Consumer<List<ExchangeFilterFunction>> filtersConsumer): HTTP 요청/응답을 처리하는 필터를 추가합니다

WebMVC 에서 Non-Blocking 통신을 위해 DeferredResult 사용 방법

DeferredResult<String> result = new DeferredResult<>();
        Mono<String> mono = webClient.get()
                                     .uri("https://sample.io/info")
                                     .retrieve()
                                     .bodyToMono(String.class);
        mono.subscribe(result::setResult);
        return result;

WebClient N 개의 요청 처리하는 방법

Mono<String> result1 = webClient.get()
                                .uri("https://sample.io/info1")
                                .retrieve()
                                .bodyToMono(String.class);
Mono<String> result2 = webClient.get()
                                .uri("https://sample.io/info1")
.retrieve() .bodyToMono(String.class); Mono<String> result3 = webClient.get() .uri("https://sample.io/info1")
.retrieve() .bodyToMono(String.class); Mono<Tuple3<String, String, String>> results = Mono.zip(result1, result2, result3); results.subscribe(tuple -> { System.out.println(tuple.getT1()); System.out.println(tuple.getT2()); System.out.println(tuple.getT3()); });

특정 ThreadPool 을 이용하여 Webclient 요청을 보내는 방법

ExecutorService executorService = Executors.newFixedThreadPool(10);
Scheduler scheduler = Schedulers.fromExecutor(executorService);

Mono<String> result = webClient.get()
                               .uri("https://sample.io/info")
                               .retrieve()
                               .bodyToMono(String.class)
                               .subscribeOn(scheduler);
result.subscribe(System.out::println);



댓글

이 블로그의 인기 게시물

이클립스 오류 - 프로젝트 폴더가 열리지 않는 경우

Subversion (SVN) 설치 및 다중 저장소 설정 가이드

MySQL Root 비밀번호 재설정하기: 완벽한 가이드