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
을 봤을 때, baseUrl
이 localhost:
로만 지정되는 오류를 만났다.
WebClient.builder().baseUrl(gateway)
에서 gateway
값이 http://localhost:8080
혹은 https://localhost:8080
와 같이 스키마(http, https
등)를 포함해야 한다.
스키마(http, https
등)가 누락되어 있으면 baseUrl
이 잘못 설정되는 오류가 있다.