001package io.freefair.spring.okhttp; 002 003import okhttp3.OkHttpClient; 004import org.springframework.boot.autoconfigure.AutoConfiguration; 005import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; 006import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 007import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; 008import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration; 009import org.springframework.boot.autoconfigure.web.client.RestTemplateBuilderConfigurer; 010import org.springframework.boot.web.client.RestTemplateBuilder; 011import org.springframework.boot.web.client.RestTemplateCustomizer; 012import org.springframework.context.annotation.Bean; 013import org.springframework.context.annotation.Conditional; 014import org.springframework.context.annotation.Lazy; 015import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; 016import org.springframework.web.client.RestTemplate; 017 018/** 019 * @author Lars Grefer 020 * @see RestTemplateAutoConfiguration 021 */ 022@AutoConfiguration(before = RestTemplateAutoConfiguration.class, after = HttpMessageConvertersAutoConfiguration.class) 023@ConditionalOnClass({RestTemplateCustomizer.class, RestTemplate.class}) 024@Conditional(NotReactiveWebApplicationCondition.class) 025public class OkHttpRestTemplateAutoConfiguration { 026 027 @Bean 028 @Lazy 029 @ConditionalOnMissingBean 030 public RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer restTemplateBuilderConfigurer, 031 OkHttpClient okHttpClient) { 032 RestTemplateBuilder builder = new RestTemplateBuilder(); 033 builder = builder.requestFactory(() -> new OkHttp3ClientHttpRequestFactory(okHttpClient)); 034 return restTemplateBuilderConfigurer.configure(builder); 035 } 036 037}