import org.springframework.core.io.FileSystemResource;
import org.springframework.http.*;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.io.File;
import java.util.Map;
/**
*
* 微服务调用通用类(也可用作普通http类用)
*/
public class RestTemplateUtils {
/**
* 发送get请求
* @param url
* @param params
* @param headers
* @param responseType
* @param <T>
* @return
*/
public static <T> T doHttpGet(String url, Map<String, String> params, Map<String, String> headers, boolean isSpringCloud, Class<T> responseType) {
RestTemplate restTemplate = getRestTemplate(isSpringCloud);
HttpHeaders restHeaders = new HttpHeaders();
restHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
restHeaders.add(CloudCodeUtils.WenToken, CloudCodeUtils.createCode());
if (headers != null) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
restHeaders.add(entry.getKey(), entry.getValue());
}
}
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
if (url.contains("?")) {
url = url + "&" + entry.getKey() + "=" + entry.getValue();
} else {
url = url + "?" + entry.getKey() + "=" + entry.getValue();
}
}
}
HttpEntity<String> restRequest = new HttpEntity<>(null, restHeaders);
ResponseEntity<T> result = restTemplate.exchange(url, HttpMethod.GET, restRequest, responseType);
return result.getBody();
//return restTemplate.getForObject(url, responseType, restRequest);
}
/**
* 发送post请求
* @param url
* @param params
* @param headers
* @param responseType
* @param <T>
* @return
*/
public static <T> T doHttpPost(String url, Map<String, String> params, Map<String, String> headers, boolean isSpringCloud, Class<T> responseType) {
RestTemplate restTemplate = getRestTemplate(isSpringCloud);
HttpHeaders restHeaders = new HttpHeaders();
MultiValueMap<String, Object> restParam = new LinkedMultiValueMap<>();
restHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
restHeaders.add(CloudCodeUtils.WenToken, CloudCodeUtils.createCode());
if (headers != null) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
restHeaders.add(entry.getKey(), entry.getValue());
}
}
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
restParam.add(entry.getKey(), entry.getValue());
}
}
HttpEntity<MultiValueMap<String, Object>> restRequest = new HttpEntity<>(restParam, restHeaders);
return restTemplate.postForObject(url, restRequest, responseType);
}
/**
* 微服务url格式 String url = "http://服务名/provider/xxx";
* 上传文件
* @param url
* @param params
* @param files
* @param headers
* @param responseType
* @param <T>
* @return
*/
public static <T> T doUploadFile(String url, Map<String, String> params, Map<String, File> files, Map<String, String> headers, boolean isSpringCloud, Class<T> responseType) {
RestTemplate restTemplate = getRestTemplate(isSpringCloud);
HttpHeaders restHeaders = new HttpHeaders();
MultiValueMap<String, Object> restParam = new LinkedMultiValueMap<>();
restHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
restHeaders.add(CloudCodeUtils.WenToken, CloudCodeUtils.createCode());
if (headers != null) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
restHeaders.add(entry.getKey(), entry.getValue());
}
}
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
restParam.add(entry.getKey(), entry.getValue());
}
}
if (files != null) {
for (Map.Entry<String, File> entry : files.entrySet()) {
restParam.add(entry.getKey(), new FileSystemResource(entry.getValue()));
}
}
HttpEntity<MultiValueMap<String, Object>> restRequest = new HttpEntity<>(restParam, restHeaders);
return restTemplate.postForObject(url, restRequest, responseType);
}
/**
* 获取RestTemplate
* @param isSpringCloud
* @return
*/
public static RestTemplate getRestTemplate(boolean isSpringCloud){
RestTemplate restTemplate = null;
if(isSpringCloud){
restTemplate = SpringContextHolder.getBean(RestTemplate.class);
/*HttpComponentsClientHttpRequestFactory httpRequestFactory = ((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory());
httpRequestFactory.setConnectTimeout(3000);
httpRequestFactory.setReadTimeout(300000);*/
}else{
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectTimeout(30000);
httpRequestFactory.setReadTimeout(60000);
restTemplate = new RestTemplate(httpRequestFactory);
}
return restTemplate;
}
}