[Spring] WebClient baseUrl 설정 오류

가오리·2024년 2월 23일
0

트러블 슈팅

목록 보기
16/16
post-thumbnail

WebClient baseUrl 설정

  1. WebClient Config
@Slf4j
@Configuration
public class WebClientConfig {
    @Value("${gateway.host}")
    private String gateway;
    private final ObjectMapper objectMapper;

    public WebClientConfig() {
        this.objectMapper = new ObjectMapper()
                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
                .registerModule(new JavaTimeModule());
    }

    @Bean
    public WebClient webClient() {
        final int bufferSize = 16 * 1024 * 1024;  // 16MB
        final ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder()
                .codecs(configurer -> {
                    configurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(objectMapper, MediaType.APPLICATION_JSON));
                    configurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(objectMapper, MediaType.APPLICATION_JSON));
                    configurer.defaultCodecs().maxInMemorySize(bufferSize);
                })
                .build();

        return WebClient.builder()
                .baseUrl(gateway)
                .exchangeStrategies(exchangeStrategies)
                .filter(logRequest())
                .build();
    }

    private ExchangeFilterFunction logRequest() {
        return (clientRequest, next) -> {
            log.info("Request: {} {}", clientRequest.method(), clientRequest.url());
            clientRequest.headers().forEach((name, values) -> values.forEach(value -> log.info("{}={}", name, value)));
            return next.exchange(clientRequest);
        };
    }
}

코드만 보면 매우 길지만 제일 중요한 부분은 WebClient.baseUrl에 값을 지정하는 부분이다.

이때 내가 집어넣는 값은 gateway 변수에 지정된 localhost:8080 String 이었다. 그 이후 webClient 통신시 찍힌 log을 봤을 때, baseUrllocalhost: 로만 지정되는 오류를 만났다.

해결방법

WebClient.builder().baseUrl(gateway)에서 gateway 값이 http://localhost:8080 혹은 https://localhost:8080와 같이 스키마(http, https 등)를 포함해야 한다.

스키마(http, https 등)가 누락되어 있으면 baseUrl이 잘못 설정되는 오류가 있다.

profile
가오리의 개발 이야기

0개의 댓글