All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nutz.spring.boot.request.NutzHttpAutoConfiguration Maven / Gradle / Ivy

There is a newer version: 3.4.1
Show newest version
package org.nutz.spring.boot.request;

import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Proxy.Type;
import java.net.URL;

import org.nutz.http.ProxySwitcher;
import org.nutz.http.Request;
import org.nutz.lang.Lang;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;

import lombok.RequiredArgsConstructor;

/**
 * 
 * @author Kerbores([email protected])
 *
 */
@AutoConfiguration
@RequiredArgsConstructor
@EnableConfigurationProperties(NutzHttpAutoConfigurationProperties.class)
@ConditionalOnExpression("${nutz.http.enabled:false}")
public class NutzHttpAutoConfiguration {

    private final NutzHttpAutoConfigurationProperties config;

    private final ApplicationContext applicationContext;

    public boolean hasBean(Class clazz) {
        try {
            return this.applicationContext.getBean(clazz) != null;
        }
        catch (Exception e) {
            return false;
        }
    }

    @Bean
    @ConditionalOnExpression("${nutz.http.proxy.enabled:false}")
    Proxy proxy() {
        return new Proxy(Type.HTTP,
                         new InetSocketAddress(this.config.getProxy().getHost(), this.config.getProxy().getPort()));
    }

    @Bean
    @ConditionalOnExpression("${nutz.http.proxy.enabled:false}")
    ProxySwitcher proxySwitcher(Proxy proxy) {

        return new ProxySwitcher() {

            @Override
            public Proxy getProxy(Request req) {
                return this.getProxy(req.getUrl());
            }

            @Override
            public Proxy getProxy(URL url) {
                return !Lang.isEmpty(NutzHttpAutoConfiguration.this.config.getProxy().getProxiedHosts())
                       && NutzHttpAutoConfiguration.this.config.getProxy().getProxiedHosts().contains(url.getHost())
                                                                                                                     ? proxy
                                                                                                                     : null;
            }
        };
    }

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnExpression("!${nutz.http.proxy.enabled:false}")
    RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate(NutzHttpRequestFactory.builder()
                                                                           .http(this.config.getHttp())
                                                                           .build());
        if (this.hasBean(ResponseErrorHandler.class)) {
            restTemplate.setErrorHandler(this.applicationContext.getBean(ResponseErrorHandler.class));
        }
        return restTemplate;
    }

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnBean(ProxySwitcher.class)
    @ConditionalOnExpression("${nutz.http.proxy.enabled:false}")
    RestTemplate proxyRestTemplate(ProxySwitcher proxySwitcher) {
        RestTemplate restTemplate = new RestTemplate(NutzHttpRequestFactory.builder()
                                                                           .proxySwitcher(proxySwitcher)
                                                                           .http(this.config.getHttp())
                                                                           .build());
        if (this.hasBean(ResponseErrorHandler.class)) {
            restTemplate.setErrorHandler(this.applicationContext.getBean(ResponseErrorHandler.class));
        }
        return restTemplate;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy