public class HttpUtils {private static String CHARSET = "UTF-8";//请求超时时间public static int socketTimeout = 30000;//传输超时时间public static int connectTimeout = 30000;private static final String HTTP = "http";private static final String HTTPS = "https";private static SSLConnectionSocketFactory sslsf = null;private static PoolingHttpClientConnectionManager cm = null;private static SSLContextBuilder builder = null;static {try {builder = new SSLContextBuilder();// 全部信任 不做身份鉴定builder.loadTrustMaterial(null, new TrustStrategy() {@Overridepublic boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {return true;}});sslsf = new SSLConnectionSocketFactory(builder.build(), new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register(HTTP, new PlainConnectionSocketFactory()).register(HTTPS, sslsf).build();cm = new PoolingHttpClientConnectionManager(registry);cm.setMaxTotal(200);} catch (Exception e) {e.printStackTrace();}}public static CloseableHttpClient getHttpClient() {CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cm).setConnectionManagerShared(true).build();return httpClient;}public static RequestConfig getConfig(){return RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();}public static <T>T sendGet(String url, Map<String,String> params, Map<String,String> headerMap, Class<T> javaType) {String apiUrl = url;StringBuffer param =new StringBuffer();int i =0;for (String key : params.keySet()) {if (i ==0){param.append("?");}else{param.append("&");}param.append(key).append("=").append(params.get(key));i++;}apiUrl += param;CloseableHttpClient httpclient = getHttpClient();;CloseableHttpResponse response =null;try {HttpGet httpGet =new HttpGet(apiUrl);httpGet.setConfig(getConfig());httpGet.setHeader("Content-Type", "application/json");if (httpGet != null && headerMap.size() != 0) {for (Map.Entry<String, String> entry : headerMap.entrySet()) {httpGet.addHeader(entry.getKey(), entry.getValue());}}//执行get请求response = httpclient.execute(httpGet);//返回结果int statusCode = response.getStatusLine().getStatusCode();if (statusCode == HttpStatus.SC_OK) {return httpOk(response,javaType);} else {return readHttpResponse(response,javaType);}}catch (IOException e) {e.printStackTrace();}finally {if (response !=null) {try {response.close();EntityUtils.consume(response.getEntity());}catch (IOException e) {e.printStackTrace();}}}return null;}/*** httpClient post请求* @param reqJson json数据* @return 可能为空 需要处理* @throws Exception*/public static <T> T sendPost(String url, String reqJson, Map<String, String> headerMap, Class<T> javaType) {CloseableHttpClient httpClient = null;HttpResponse httpResponse=null;try {httpClient = getHttpClient();HttpPost httpPost = new HttpPost(url);httpPost.setConfig(getConfig());httpPost.setHeader("Content-Type", "application/json");if (headerMap != null && headerMap.size() != 0) {for (Map.Entry<String, String> entry : headerMap.entrySet()) {httpPost.addHeader(entry.getKey(), entry.getValue());}}StringEntity entity = new StringEntity(reqJson, CHARSET);entity.setContentEncoding(CHARSET);httpPost.setEntity(entity);//执行请求httpResponse = httpClient.execute(httpPost);//返回结果解析int statusCode = httpResponse.getStatusLine().getStatusCode();if (statusCode == HttpStatus.SC_OK) {return httpOk(httpResponse,javaType);} else {return readHttpResponse(httpResponse,javaType);}} catch (Exception e) {e.printStackTrace();} finally {if (httpClient != null) {try {httpClient.close();EntityUtils.consume(httpResponse.getEntity());}catch (IOException e) {e.printStackTrace();}}}return null;}/*** 发送 SSL POST 请求(HTTPS),K-V形式* @param*/public static String doPostSSL(String url, Map<String,String> params) {CloseableHttpClient httpClient = getHttpClient();HttpPost httpPost =new HttpPost(url);CloseableHttpResponse response =null;String result =null;try {httpPost.setConfig(getConfig());List pairList =new ArrayList(params.size());for (Map.Entry entry : params.entrySet()) {NameValuePair pair =new BasicNameValuePair(entry.getKey().toString(), entry.getValue().toString());pairList.add(pair);}httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName(CHARSET)));response = httpClient.execute(httpPost);int statusCode = response.getStatusLine().getStatusCode();if (statusCode != HttpStatus.SC_OK) {return null;}HttpEntity entity = response.getEntity();if (entity !=null) {result = EntityUtils.toString(entity,CHARSET);}}catch (Exception e) {e.printStackTrace();}finally {if (response !=null) {try {EntityUtils.consume(response.getEntity());}catch (IOException e) {e.printStackTrace();}}}return result;}/*** 发送 SSL POST 请求(HTTPS),JSON形式* @param*/public static String doPostSSL(String url, Object json) {CloseableHttpClient httpClient =getHttpClient();HttpPost httpPost =new HttpPost(url);CloseableHttpResponse response =null;String result =null;try {httpPost.setConfig(getConfig());StringEntity stringEntity =new StringEntity(json.toString(),CHARSET);// 解决中文乱码问题stringEntity.setContentEncoding(CHARSET);stringEntity.setContentType("application/json");httpPost.setEntity(stringEntity);response = httpClient.execute(httpPost);int statusCode = response.getStatusLine().getStatusCode();if (statusCode != HttpStatus.SC_OK) {return null;}HttpEntity entity = response.getEntity();if (entity !=null) {result = EntityUtils.toString(entity,CHARSET);}}catch (Exception e) {e.printStackTrace();}finally {if (response !=null) {try {EntityUtils.consume(response.getEntity());}catch (IOException e) {e.printStackTrace();}}}return result;}/*** 原生字符串发送put请求* @param url* @param token* @param jsonStr* @return* @date 2019/6/17 17:46**/public static String doPut(String url, String token, String jsonStr) {CloseableHttpClient httpClient = HttpClients.createDefault();HttpPut httpPut =new HttpPut(url);httpPut.setConfig(getConfig());httpPut.setHeader("Content-type","application/json");httpPut.setHeader("DataEncoding",CHARSET);httpPut.setHeader("access-token", token);CloseableHttpResponse httpResponse =null;try {httpPut.setEntity(new StringEntity(jsonStr));httpResponse = httpClient.execute(httpPut);HttpEntity entity = httpResponse.getEntity();String result = EntityUtils.toString(entity);return result;}catch (ClientProtocolException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}finally {if (httpResponse !=null) {try {httpResponse.close();}catch (IOException e) {e.printStackTrace();}}if (null != httpClient) {try {httpClient.close();}catch (IOException e) {e.printStackTrace();}}}return null;}/*** 发送delete请求* @param url* @param token* @param jsonStr* @return* @date 2019/6/17 17:47**/public static String doDelete(String url, String token, String jsonStr) {CloseableHttpClient httpClient = HttpClients.createDefault();HttpDelete httpDelete =new HttpDelete(url);httpDelete.setConfig(getConfig());httpDelete.setHeader("Content-type","application/json");httpDelete.setHeader("DataEncoding",CHARSET);httpDelete.setHeader("access-token", token);CloseableHttpResponse httpResponse =null;try {httpResponse = httpClient.execute(httpDelete);HttpEntity entity = httpResponse.getEntity();String result = EntityUtils.toString(entity);return result;}catch (ClientProtocolException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}finally {if (httpResponse !=null) {try {httpResponse.close();}catch (IOException e) {e.printStackTrace();}}if (null != httpClient) {try {httpClient.close();}catch (IOException e) {e.printStackTrace();}}}return null;}private static <T>T httpOk(HttpResponse httpResponse,Class<T> javaType){HttpEntity resEntity = httpResponse.getEntity();String result = null;try {result = EntityUtils.toString(resEntity);ObjectMapper mapper=new ObjectMapper();T t = mapper.readValue(result, javaType);return t;} catch (IOException e) {e.printStackTrace();}return null;}public static <T>T readHttpResponse(HttpResponse httpResponse, Class<T> javaType)throws ParseException, IOException {StringBuilder builder = new StringBuilder();Map<String,String> resultMap= Maps.newHashMap();// 获取响应消息实体HttpEntity entity = httpResponse.getEntity();// 响应状态resultMap.put("code",httpResponse.getStatusLine().toString());HeaderIterator iterator = httpResponse.headerIterator();while (iterator.hasNext()) {builder.append("\t" + iterator.next());}resultMap.put("message",builder.toString());builder.delete(0,builder.length());// 判断响应实体是否为空if (entity != null) {String responseString = EntityUtils.toString(entity);builder.append(responseString.replace("\r\n", ""));}resultMap.put("errorData",builder.toString());//转成实体类String toJSON = JSONObject.toJSON(resultMap).toString();ObjectMapper mapper=new ObjectMapper();return mapper.readValue(toJSON, javaType);}}
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency>
调用:
HttpUtils.sendPost(healthRequest.getStudentReportList(pageNum,pageSize),json,healthRequest.getHeader(), RESTfulResultVO.class);HttpUtils.sendGet(healthRequest.getStudentReportInfo(reportId), Maps.newHashMap(),healthRequest.getHeader(),RESTfulResultVO.class);
