package com.basic.analy.utils; import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import javax.annotation.PostConstruct; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; // ///** // * @author pl // */ //@Component //public class RestTemplateUtil { // // private static final Pattern QUERY_PARAM_PATTREN = Pattern.compile("([^&=]+)(=?)([^&]+)?"); // // @Autowired // private RestTemplate restTemplate; // // private static RestTemplateUtil restTemplateUtil; // // // @PostConstruct // public void init() { // restTemplateUtil = this; // restTemplateUtil.restTemplate = this.restTemplate; // } // public static void main(String[] args){ // JSONObject paramMap = new JSONObject(); // paramMap.put("clusterIds","f697c279-d0bc-44de-9a00-26a132c8247e"); // String post = restTemplateUtil.post("http://192.168.1.182:3696/data/api-d/cluster/findClusterNodesByClusterIds", paramMap , MediaType.APPLICATION_JSON_UTF8, false); // System.out.println(post); // } // // /** // * httpclient POST调用,可以携带token,[-封装的postForEntity接口-] // * @param url 请求地址 // * @param paramMap 请求参数,必须是MultiValueMap类型 // * @param responseType 返回类型 // * @param isNeedToken 请求header是否需要携带token // * @return T // * @throws RestClientException // */ // public static T postHeaderForEntity(String url, MultiValueMap paramMap, Class responseType, boolean isNeedToken) // throws RestClientException { // HttpHeaders headers = new HttpHeaders(); // headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // if(isNeedToken) { // headers.add("Authorization", "Bearer " + RequestUtil.getTokenByParam()); // } // HttpEntity> request = new HttpEntity>(paramMap, headers); // return restTemplateUtil.restTemplate.postForEntity(url, request, responseType).getBody(); // } // // // public static T getHeaderForEntity(String url, MultiValueMap paramMap, Class responseType, boolean isNeedToken) // throws RestClientException { // HttpHeaders headers = new HttpHeaders(); // headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // if(isNeedToken) { // headers.add("Authorization", "Bearer " + RequestUtil.getTokenByParam()); // } // HttpEntity> request = new HttpEntity>(paramMap, headers); // return restTemplateUtil.restTemplate.exchange(url, HttpMethod.GET, request, responseType).getBody(); // // } // // // /** // * @param url // * @param params // * @return // * @Title: get // * @author: lp // * @Description: TODO // * @return: String // */ // public static String get(String url, JSONObject params,boolean isNeedToken) { // if(isNeedToken){ // params.put("access_token", RequestUtil.getTokenByParam()); // } // String response = restTemplateUtil.restTemplate.getForObject(expandURL(url, params.keySet()), String.class, params); // return response; // } // // /** // * @param url // * @param params // * @param mediaType // * @param isNeedToken // * @return // * @Title: post // * @author: lp // * @Description: 将参数都拼接在url之后 // * @return: String // */ // public static String post(String url, JSONObject params, MediaType mediaType, boolean isNeedToken) { // // 拿到header信息 // HttpHeaders requestHeaders = new HttpHeaders(); // requestHeaders.setContentType(mediaType); // if(isNeedToken) { // requestHeaders.add("Authorization", "Bearer " + RequestUtil.getTokenByParam()); // } // HttpEntity requestEntity = (mediaType == MediaType.APPLICATION_JSON // || mediaType == MediaType.APPLICATION_JSON_UTF8) ? new HttpEntity(params, requestHeaders) // : new HttpEntity(null, requestHeaders); // String result = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) // ? restTemplateUtil.restTemplate.postForObject(url, requestEntity, String.class) // : restTemplateUtil.restTemplate.postForObject(expandURL(url, params.keySet()), requestEntity, String.class, params); // return result; // } // // // // /** // * @param url // * @param params // * @param mediaType // * @param isNeedToken // * @return // * @Title: post // * @author: lp // * @Description: 将参数都拼接在url之后 // * @return: String // */ // public static T postImg(String url, JSONObject params, MediaType mediaType, Class clz, boolean isNeedToken) { // // // //复杂构造函数的使用 // SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); // requestFactory.setConnectTimeout(30000);// 设置超时 // requestFactory.setReadTimeout(30000); // // //利用复杂构造器可以实现超时设置,内部实际实现为 HttpClient // RestTemplate restTemplate = new RestTemplate(requestFactory); // // restTemplate.getMessageConverters().add(new FormHttpMessageConverter()); // // // // 设置header信息 // HttpHeaders requestHeaders = new HttpHeaders(); // requestHeaders.setContentType(mediaType); // if(isNeedToken) { // requestHeaders.add("Authorization", "Bearer " + RequestUtil.getTokenByParam()); // } // HttpEntity requestEntity = ( // mediaType == MediaType.APPLICATION_JSON // || mediaType == MediaType.APPLICATION_JSON_UTF8) // ? new HttpEntity(params, requestHeaders) // : (mediaType == MediaType.APPLICATION_FORM_URLENCODED // ? new HttpEntity(createMultiValueMap(params), requestHeaders) // : new HttpEntity<>(null, requestHeaders)); // // T result = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) // ? restTemplate.postForObject(url, requestEntity, clz) // restTemplateUtil. // : restTemplate.postForObject(mediaType == MediaType.APPLICATION_FORM_URLENCODED // restTemplateUtil. // ? url // : expandURL(url, params.keySet()), requestEntity, clz, params); // // return result; // } // // /** // * @param url // * @param params // * @param mediaType // * @param clz // * @return // * @Title: post // * @author: lp // * @Description: 发送json或者form格式数据 // * @return: String // */ // public static T post(String url, JSONObject params, MediaType mediaType, Class clz, boolean isNeedToken) { // //这是为 MediaType.APPLICATION_FORM_URLENCODED 格式HttpEntity 数据 添加转换器 // //还有就是,如果是APPLICATION_FORM_URLENCODED方式发送post请求, // //也可以直接HttpHeaders requestHeaders = new HttpHeaders(createMultiValueMap(params),true),就不用增加转换器了 // restTemplateUtil.restTemplate.getMessageConverters().add(new FormHttpMessageConverter()); // // 设置header信息 // HttpHeaders requestHeaders = new HttpHeaders(); // requestHeaders.setContentType(mediaType); // if(isNeedToken) { // requestHeaders.add("Authorization", "Bearer " + RequestUtil.getTokenByParam()); // } // HttpEntity requestEntity = ( // mediaType == MediaType.APPLICATION_JSON // || mediaType == MediaType.APPLICATION_JSON_UTF8) // ? new HttpEntity(params, requestHeaders) // : (mediaType == MediaType.APPLICATION_FORM_URLENCODED // ? new HttpEntity(createMultiValueMap(params), requestHeaders) // : new HttpEntity<>(null, requestHeaders)); // // T result = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) // ? restTemplateUtil.restTemplate.postForObject(url, requestEntity, clz) // : restTemplateUtil.restTemplate.postForObject(mediaType == MediaType.APPLICATION_FORM_URLENCODED // ? url // : expandURL(url, params.keySet()), requestEntity, clz, params); // // return result; // } // // // private static MultiValueMap createMultiValueMap(JSONObject params) { // MultiValueMap map = new LinkedMultiValueMap<>(); // for(String key : params.keySet()) { // if(params.get(key) instanceof List) { // for(Iterator it = ((List) params.get(key)).iterator(); it.hasNext(); ) { // String value = it.next(); // map.add(key, value); // } // } else { // map.add(key, params.getString(key)); // } // } // return map; // } // // // private static String expandURL(String url, Set keys) { // Matcher mc = RestTemplateUtil.QUERY_PARAM_PATTREN.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(); // } // //}