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}