WebClient로 Spring Boot에서 외부 API 요청하기

송준희·2021년 7월 26일
0

Back

목록 보기
7/7

RestTemplate이나 WebClient를 이용하면 외부 API를 호출할 수 있는데
RestTemplate는 조만간 Deprecated된다고 하므로 WebClient를 사용할 것이다.

gradle에 implementation("org.springframework.boot:spring-boot-starter-webflux")를 추가한다.


아래의 코드와 같이 요청에 대한 response를 받아올 수도 있고

    public String signIn(UserSignInRequest userSignInRequest) {
        WebClient webClient = WebClient.create(${baseURL});
        int signInResponse = webClient.post()
                .uri("/v1/api/auth/signin")
                .body(BodyInserters.fromValue(userSignInRequest))
                .exchangeToMono(
                        clientResponse -> Mono.just(clientResponse.statusCode().value())
                ).onErrorMap(
                        throwable -> {
                            throwable.printStackTrace();
                            return throwable;
                        }
                ).block();
    }

헤더를 추가하거나 요청에 대한 response를 dto로 매핑할 수 있다.

    public void getTokenGenereatedFromOtherApi() {
        WebClient webClient = WebClient.create(${baseURL});
        return webClient.get()
                .uri("/v1/api/auth/info")
                .header(HttpHeaders.AUTHORIZATION, "Bearer" + ${token})
                .accept(MediaType.APPLICATION_JSON)
                .retrieve()
                .bodyToMono(UserInfoResponse.class)
                .onErrorMap(
                        throwable -> {
                            throwable.printStackTrace();
                            return throwable;
                        }
                ).map(
                    userInfoResponse -> jwtTokenProvider.generateJwtToken(${userId}, ${userRole})
                ).block();
    }

하지만 동기 방식으로 구현한 코드에 비동기 방식인 webflux를 도입하는 것이 괜찮은지는 잘 모르겠다.

profile
오늘 달리면 내일 걸을 수 있다!

0개의 댓글