定义RestTemplate
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.ResourceHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
import org.springframework.http.converter.xml.SourceHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
public class RestTemplateUtil {
public static RestTemplate Do() {
SimpleClientHttpRequestFactory httpRequestFactory = new SimpleClientHttpRequestFactory();
httpRequestFactory.setReadTimeout(60000);
httpRequestFactory.setConnectTimeout(2000);
//使用fidder抓包时用到代理
// Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888));
// httpRequestFactory.setProxy(proxy);
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
messageConverters.add(new ByteArrayHttpMessageConverter());
/** 解决乱码的converter */
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
stringHttpMessageConverter.setWriteAcceptCharset(false);
messageConverters.add(stringHttpMessageConverter);
messageConverters.add(new ResourceHttpMessageConverter());
messageConverters.add(new SourceHttpMessageConverter());
messageConverters.add(new AllEncompassingFormHttpMessageConverter());
RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
restTemplate.setMessageConverters(messageConverters);
return restTemplate;
}
}
请求逻辑
import com.alibaba.fastjson.JSON;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
/**
* 请求工具类
*
* @author RuiHuang
*/
public class TransmitUtil {
private static ILog logger = LogManager.getLogger(TransmitUtil.class);
/**
* 接口请求
*
* @param url 接口地址
* @param requestType 请求方式
* @param query query参数
* @param body body参数
* @return 请求结果
*/
public static ResponseBase transmit(String url, HttpMethod requestType, Map<String, Object> query, Object body) {
String bodyJsonString = JSON.toJSONString(body);
return transmit(url, requestType, query, bodyJsonString, null);
}
/**
* 接口请求
*
* @param url 接口地址
* @param requestType 请求方式
* @param query query参数
* @param bodyJsonString body参数JSON
* @return 请求结果 code 0正常返回 1 报错
*/
public static ResponseBase transmit(String url, HttpMethod requestType, Map<String, Object> query, String bodyJsonString) {
return transmit(url, requestType, query, bodyJsonString, null);
}
/**
* 接口请求
*
* @param url 接口地址
* @param requestType 请求方式
* @param query query参数
* @param body body参数
* @param headerMap 请求头
* @return 请求结果
*/
public static ResponseBase transmit(String url, HttpMethod requestType, Map<String, Object> query, Object body, Map<String, String> headerMap) {
String bodyJsonString = JSON.toJSONString(body);
return transmit(url, requestType, query, bodyJsonString, headerMap);
}
/**
* 接口请求
*
* @param url 接口地址
* @param requestType 请求方式
* @param query query参数
* @param bodyJsonString body参数JSON
* @param headerMap 请求头
* @return 请求结果 code 0正常返回 1 报错
*/
public static ResponseBase transmit(String url, HttpMethod requestType, Map<String, Object> query, String bodyJsonString, Map<String, String> headerMap) {
ResponseBase rsp = new ResponseBase();
try {
RestTemplate rest = RestTemplateUtil.Do();//rest
//构建URL
StringBuilder urlSb = new StringBuilder();
if (url == null || url.isEmpty()) {
return rsp;
} else if (!url.startsWith("http")) {
//添加http
urlSb.append("http://");
}
urlSb.append(url);
urlSb.append("?");
if (query != null && !query.isEmpty()) {
//query参数列表
for (Map.Entry<String, Object> param : query.entrySet()) {
urlSb.append(param.getKey());
urlSb.append("=");
urlSb.append(String.valueOf(param.getValue()));
urlSb.append("&");
}
}
urlSb.deleteCharAt(urlSb.length() - 1);
url = urlSb.toString();
ResponseEntity<String> response;
//设置请求头
MultiValueMap<String, String> header = new LinkedMultiValueMap<>();
header.add("Content-Type", "application/json;charset=UTF-8");
if (headerMap != null && headerMap.size() > 0) {
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
header.add(entry.getKey(), entry.getValue());
}
}
//可避免部分返回乱码情况
header.set("Accept-Charset", "utf-8");
//将参数放入body中
HttpEntity<String> httpEntity = new HttpEntity<>(bodyJsonString, header);
//请求接口
response = rest.exchange(url, requestType, httpEntity, String.class);
rsp.setStatus(0);
rsp.setMessage(response.getBody());
} catch (Exception ex) {
rsp.setStatus(1);
rsp.setMessage("请求接口出现错误\n" + ex.toString());
}
return rsp;
}
}
import lombok.Data;
@Data
public class ResponseBase<T> {
private int status;
private String message;
private T data;
public ResponseBase() {
this.setStatus(-111);
this.setData(null);
this.setMessage("系统未设置状态");
}
public ResponseBase(int status, String message) {
this.setStatus(status);
this.setData(null);
this.setMessage(message);
}
public ResponseBase(int status, String message, T data) {
this.setStatus(status);
this.setData(data);
this.setMessage(message);
}
}