背景
当前,不是所有项目都使用Spring Cloud架构,有的依然使用Spring Boot+Http的方式来架构微服务。而本人当前的项目组就是这样的,既然用了那么就了,那么就得总结一下RestTemplate的使用。
RestTemplate设置请求超时时间
private static RestTemplate assembledSimpleRestTemplate(int connectTimeoutSeconds, int readTimeoutSeconds) {
RestTemplate restTemplate = new RestTemplate();
SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
if (connectTimeoutSeconds > 0) {
simpleClientHttpRequestFactory.setConnectTimeout(connectTimeoutSeconds*1000);
}
if (readTimeoutSeconds > 0) {
simpleClientHttpRequestFactory.setReadTimeout(readTimeoutSeconds*1000);
}
restTemplate.setRequestFactory(simpleClientHttpRequestFactory);
return restTemplate;
}
RestTemplate Get请求
headers,params都可选,参数只能使用查询参数格式
private static String doSendGet(String url,
Map<String, String> headers,
Map<String, String> params,
int connectTimeout,
int readTimeout) {
String result = "";
try {
if (StringUtils.isBlank(url)) {
return result;
}
RestTemplate restTemplate = assembledSimpleRestTemplate(connectTimeout, readTimeout);
// 设置headers
HttpHeaders httpHeaders = new HttpHeaders();
if (MapUtils.isNotEmpty(headers)) {
headers.forEach(httpHeaders::add);
}
// 设置查询参数
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromHttpUrl(url);
URI uri = null;
if (MapUtils.isNotEmpty(params)) {
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
params.forEach(multiValueMap::add);
uri = uriComponentsBuilder.queryParams(multiValueMap).build().toUri();
}
HttpEntity<String> requestEntity = new HttpEntity(null, httpHeaders);
ResponseEntity<String> responseEntity = restTemplate.exchange(Objects.requireNonNull(uri), HttpMethod.GET, requestEntity, String.class);
if (responseEntity.getStatusCode() != HttpStatus.OK) {
log.error("sendGet status error, url: {}, status: {}", url, responseEntity.getStatusCode());
return result;
}
result = responseEntity.getBody();
} catch (Exception e) {
log.error("sendGet request error, url: {}", url, e);
}
return result;
}
RestTemplate POST请求,参数JSON格式
private static String doSendPostJson(String url,
Map<String, String> headers,
String bodyJson,
int connectTimeoutSeconds,
int readTimeoutSeconds) {
String result = ""