import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.net.SocketTimeoutException;
@Configuration
@Slf4j
public class RestTemplateConfig {
/**
* http请求默认连接超时时间
*/
final int DEFAULT_CONNECT_TIMEOUT = 30 * 1000;
/**
* http请求读数据超时时间
*/
final int DEFAULT_READ_TIMEOUT = 30 * 1000;
@Primary
@Bean("restTemplate")
public RestTemplate restTemplate() {
RestTemplateBuilder builder = new RestTemplateBuilder();
return builder.setConnectTimeout(DEFAULT_CONNECT_TIMEOUT)
.setReadTimeout(DEFAULT_READ_TIMEOUT)
.build();
}
@Bean("appRestTemplate")
public RestTemplate appRestTemplate() {
RestTemplateBuilder builder = new RestTemplateBuilder();
ResponseErrorHandler responseErrorHandler = new ResponseErrorHandler() {
@Override
public boolean hasError(ClientHttpResponse clientHttpResponse) {
return true;
}
@Override
public void handleError(ClientHttpResponse clientHttpResponse) {
}
};
ClientHttpRequestInterceptor requestInterceptor = (httpRequest, bytes, clientHttpRequestExecution) -> {
ClientHttpResponse execute;
try {
execute = clientHttpRequestExecution.execute(httpRequest, bytes);
} catch (IOException e) {
log.info("appRestTemplate...error:" + e);
// 特殊处理超时异常
if (e instanceof SocketTimeoutException) {
// 返回自定义异常
// throw new AppException(AppErrorEnum.REQUEST_TIMEOUT);
}
throw e;
}
return execute;
};
return builder.setConnectTimeout(DEFAULT_CONNECT_TIMEOUT)
.setReadTimeout(DEFAULT_READ_TIMEOUT)
// 自定义拦截器
.interceptors(requestInterceptor)
// 自定义异常处理
.errorHandler(responseErrorHandler)
.build();
}
}
RestTemplate 中捕获超时异常返回自定义错误码
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...