package com.highdatas.mdm.util; import lombok.extern.slf4j.Slf4j; import org.springframework.http.*; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; import java.nio.charset.StandardCharsets; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * @author kimi * @description * @date 2019-12-13 13:35 */ @Component @Slf4j public class HttpUtils { public static String HttpRestClient(String url, HttpMethod method, Map formParams) { return HttpRestClient(url,method,formParams, null, null); } public static String HttpRestClient(String url, HttpMethod method, Map formParams, String getParams) { return HttpRestClient(url,method,formParams, getParams, null); } public static String HttpRestClient(String url, HttpMethod method, Map formParams, MediaType mediaType) { return HttpRestClient(url,method,formParams, null, mediaType); } public static String HttpRestClient(String url, HttpMethod method, Map formParams, String getParams, MediaType mediaType) { if (!StringUtils.isEmpty(getParams)) { url = url + Constant.QUESTION + getParams; } SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setConnectTimeout(10*1000); requestFactory.setReadTimeout(10*1000); RestTemplate client = new RestTemplate(requestFactory); client.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); HttpHeaders headers = new HttpHeaders(); HttpEntity requestEntity; if (mediaType == null){ headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap vals = new LinkedMultiValueMap(); Set keySet = formParams.keySet(); for (String key : keySet) { String s = formParams.get(key); List strings = new ArrayList<>(); strings.add(s); vals.put(key,strings); } requestEntity = new HttpEntity>(vals, headers); }else { headers.setContentType(mediaType); requestEntity = new HttpEntity>(formParams, headers); } // 执行HTTP请求 ResponseEntity response = client.exchange(url, method, requestEntity, String.class); String body = response.getBody(); log.info(MessageFormat.format("请求外部接口:url:{0}, 返回结果:{1}", url, body)); return body; } public static String HttpRestClientByObjectParams(String url, HttpMethod method, Map formParams, String getParams,Map headerValMap, MediaType mediaType) { if (!StringUtils.isEmpty(getParams)) { url = url + Constant.QUESTION + getParams; } SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setConnectTimeout(10*1000); requestFactory.setReadTimeout(10*1000); RestTemplate client = new RestTemplate(requestFactory); client.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); HttpHeaders headers = new HttpHeaders(); if (mediaType == null){ headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); }else { headers.setContentType(mediaType); } if (headerValMap != null) { headers.setAll(headerValMap); } HttpEntity> requestEntity = new HttpEntity>(formParams, headers); // 执行HTTP请求 ResponseEntity response = client.exchange(url, method, requestEntity, String.class); String body = response.getBody(); log.info(MessageFormat.format("请求外部接口:url:{0}, 返回结果:{1}", url, body)); return body; } public static String getUrlParamsByMap(Map map) { if (map == null) { return ""; } StringBuffer sb = new StringBuffer(); for (Map.Entry entry : map.entrySet()) { Object mapValue = entry.getValue(); if (mapValue instanceof List) { List valueList = (List) mapValue; mapValue = valueList.stream().map(value -> value.toString()).collect(Collectors.joining(Constant.SEMICOLON)); } sb.append(entry.getKey() + "=" + mapValue); sb.append("&"); } String s = sb.toString(); if (s.endsWith("&")) { s = org.apache.commons.lang.StringUtils.substringBeforeLast(s, "&"); } return s; } }