
org.nutz.spring.boot.request.NutzHttpAutoConfiguration Maven / Gradle / Ivy
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 extends Object> 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