工具类
import com.alibaba.fastjson.JSONObject;
import com.smcv.yjapp.common.base.ResultData;
import com.smcv.yjapp.common.exception.AppException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.*;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RestTemplateUtils {
private Logger logger = LoggerFactory.getLogger(RestTemplateUtils.class);
private static class DefaultResponseErrorHandler implements ResponseErrorHandler {
private Logger logger = LoggerFactory.getLogger(RestTemplateUtils.class);
@Override
public boolean hasError(ClientHttpResponse response) throws IOException {
return response.getStatusCode().value() != HttpServletResponse.SC_OK;
}
@Override
public void handleError(ClientHttpResponse response) throws IOException {
logger.error(JSONObject.toJSONString(response));
HttpStatus responseStatus = response.getStatusCode();
if (HttpStatus.UNAUTHORIZED.value() == responseStatus.value() || HttpStatus.FORBIDDEN.value() == responseStatus.value()) {
throw new AppException();
}
BufferedReader br = new BufferedReader(new InputStreamReader(response.getBody()));
StringBuilder sb = new StringBuilder();
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
try {
throw new Exception(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static <T> T get(String url, JSONObject params, Class<T> clz) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
url = expandURL(url, params.keySet());
T response = restTemplate.getForObject(url, clz, params);
return response;
}
public static ResultData get(String url, HttpHeaders requestHeaders, JSONObject params) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
url = expandURL(url, params.keySet());
HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);
ResponseEntity<ResultData> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, ResultData.class, params);
return response.getBody();
}
public static String post(String url, HttpHeaders requestHeaders, JSONObject params, MediaType mediaType) {
RestTemplate restTemplate = new RestTemplate();
requestHeaders.setContentType(mediaType);
HttpEntity<JSONObject> requestEntity = (mediaType == MediaType.APPLICATION_JSON
|| mediaType == MediaType.APPLICATION_JSON_UTF8) ? new HttpEntity<JSONObject>(params, requestHeaders)
: new HttpEntity<JSONObject>(null, requestHeaders);
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
String result = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8)
? restTemplate.postForObject(url, requestEntity, String.class)
: restTemplate.postForObject(expandURL(url, params.keySet()), requestEntity, String.class, params);
return result;
}
public static <T> T post(String url, HttpHeaders requestHeaders, JSONObject params, MediaType mediaType, Class<T> clz) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new FormHttpMessageConverter());
requestHeaders.setContentType(mediaType);
HttpEntity<?> requestEntity = (
mediaType == MediaType.APPLICATION_JSON
|| mediaType == MediaType.APPLICATION_JSON_UTF8)
? new HttpEntity<JSONObject>(params, requestHeaders)
: (mediaType == MediaType.APPLICATION_FORM_URLENCODED
? new HttpEntity<MultiValueMap>(createMultiValueMap(params), requestHeaders)
: new HttpEntity<>(null, requestHeaders));
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
T result = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8)
? restTemplate.postForObject(url, requestEntity, clz)
: restTemplate.postForObject(mediaType == MediaType.APPLICATION_FORM_URLENCODED
? url
: expandURL(url, params.keySet()), requestEntity, clz, params);
return result;
}
private static MultiValueMap<String, String> createMultiValueMap(JSONObject params) {
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
for (String key : params.keySet()) {
if (params.get(key) instanceof List) {
for (Iterator<String> it = ((List<String>) params.get(key)).iterator(); it.hasNext(); ) {
String value = it.next();
map.add(key, value);
}
} else {
map.add(key, params.getString(key));
}
}
return map;
}
public static String expandURL(String url, Set<?> keys) {
final Pattern QUERY_PARAM_PATTERN = Pattern.compile("([^&=]+)(=?)([^&]+)?");
Matcher mc = QUERY_PARAM_PATTERN.matcher(url);
StringBuilder sb = new StringBuilder(url);
if (mc.find()) {
sb.append("?");
} else {
sb.append("&");
}
for (Object key : keys) {
sb.append(key).append("=").append("{").append(key).append("}").append("&");
}
return sb.deleteCharAt(sb.length() - 1).toString();
}
public static RestTemplate restTemplate;
public void setRestTemplate(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public static String get(ServletRequest req, String url, HttpHeaders requestHeaders, Map json, Map<String, ?> params) {
ResponseEntity<String> rss = request(req, url, requestHeaders, HttpMethod.GET, params);
return rss.getBody();
}
public static ResponseEntity<String> request(ServletRequest req, String url, HttpHeaders requestHeaders, HttpMethod method, Map<String, ?> params) {
HttpServletRequest request = (HttpServletRequest) req;
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = request.getHeader(key);
requestHeaders.add(key, value);
}
if (params == null) {
params = request.getParameterMap();
}
HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);
ResponseEntity<String> rss = restTemplate.exchange(url, method, requestEntity, String.class, params);
return rss;
}
}
请求post示例
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(请求入参));
返回实体 名字= RestTemplateUtils.post(url, new HttpHeaders(), param, MediaType.APPLICATION_JSON_UTF8, 返回实体.class);
get同理
