import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang.StringUtils; import org.springframework.http.*; import org.springframework.web.client.RestTemplate; import java.util.Iterator; import java.util.Map; /** * 調用 Restful 接口 Util * * @author sunjianlei */ public class RestUtil { /** * RestAPI 調用器 */ private final static RestTemplate RT = new RestTemplate(); private static HttpHeaders headers; public HttpHeaders getHeaders() { return headers; } public void setHeaders(HttpHeaders headers) { this.headers = headers; } public static RestTemplate getRestTemplate() { return RT; } /** * 發送 get 請求 */ public static JSONObject get(String url) { return getNative(url, null, null).getBody(); } /** * 發送 get 請求 */ public static JSONObject get(String url, JSONObject variables) { return getNative(url, variables, null).getBody(); } /** * 發送 get 請求 */ public static JSONObject get(String url, JSONObject variables, JSONObject params) { return getNative(url, variables, params).getBody(); } /** * 發送 get 請求,返回原生 ResponseEntity 對象 */ public static ResponseEntity<JSONObject> getNative(String url, JSONObject variables, JSONObject params) { return request(url, HttpMethod.GET, variables, params); } /** * 發送 Post 請求 */ public static JSONObject post(String url) { return postNative(url, null, null).getBody(); } /** * 發送 Post 請求 */ public static JSONObject post(String url, JSONObject params) { return postNative(url, null, params).getBody(); } /** * 發送 Post 請求 */ public static JSONObject post(String url, JSONObject variables, JSONObject params) { return postNative(url, variables, params).getBody(); } /** * 發送 POST 請求,返回原生 ResponseEntity 對象 */ public static ResponseEntity<JSONObject> postNative(String url, JSONObject variables, JSONObject params) { return request(url, HttpMethod.POST, variables, params); } /** * 發送 put 請求 */ public static JSONObject put(String url) { return putNative(url, null, null).getBody(); } /** * 發送 put 請求 */ public static JSONObject put(String url, JSONObject params) { return putNative(url, null, params).getBody(); } /** * 發送 put 請求 */ public static JSONObject put(String url, JSONObject variables, JSONObject params) { return putNative(url, variables, params).getBody(); } /** * 發送 put 請求,返回原生 ResponseEntity 對象 */ public static ResponseEntity<JSONObject> putNative(String url, JSONObject variables, JSONObject params) { return request(url, HttpMethod.PUT, variables, params); } /** * 發送 delete 請求 */ public static JSONObject delete(String url) { return deleteNative(url, null, null).getBody(); } /** * 發送 delete 請求 */ public static JSONObject delete(String url, JSONObject variables, JSONObject params) { return deleteNative(url, variables, params).getBody(); } /** * 發送 delete 請求,返回原生 ResponseEntity 對象 */ public static ResponseEntity<JSONObject> deleteNative(String url, JSONObject variables, JSONObject params) { return request(url, HttpMethod.DELETE, null, variables, params, JSONObject.class); } /** * 發送請求 */ public static ResponseEntity<JSONObject> request(String url, HttpMethod method, JSONObject variables, JSONObject params) { return request(url, method, getHeaderApplicationJson(), variables, params, JSONObject.class); } /** * 發送請求 * @param url 請求地址 * @param method 請求方式 * @param headers 請求頭 可空 * @param variables 請求url參數 可空 * @param params 請求body參數 可空 * @param responseType 返回類型 * @return ResponseEntity<responseType> */ public static <T> ResponseEntity<T> request(String url, HttpMethod method, HttpHeaders headers, JSONObject variables, JSONObject params, Class<T> responseType) { if (StringUtils.isEmpty(url)) { throw new RuntimeException("url 不能為空"); } if (method == null) { throw new RuntimeException("method 不能為空"); } if (headers == null) { headers = new HttpHeaders(); } // 請求體 String body = ""; if (params != null) { body = params.toJSONString(); } // 拼接 url 參數 if (variables != null) { url += ("?" + asUrlVariables(variables)); } // 發送請求 HttpEntity<String> request = new HttpEntity<>(body, headers); return RT.exchange(url, method, request, responseType); } /** * 獲取JSON請求頭 */ private static HttpHeaders getHeaderApplicationJson() { return getHeader(); } /** * 獲取請求頭 */ private static HttpHeaders createHeader(String mediaType) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.parseMediaType(mediaType)); headers.add("Accept", mediaType); return headers; } /** * 設置請求頭 */ public static void setHeader(Map<String,String> headMap) { headers = createHeader(MediaType.APPLICATION_JSON_VALUE); Iterator<String> it = headMap.keySet().iterator(); while (it.hasNext()){ String key = it.next(); headers.add(key, headMap.get(key)); } } /** * 設置請求頭 */ public static HttpHeaders getHeader() { return headers == null? createHeader(MediaType.APPLICATION_JSON_VALUE):headers; } /** * 將 JSONObject 轉為 a=1&b=2&c=3...&n=n 的形式 */ public static String asUrlVariables(JSONObject variables) { Map<String, Object> source = variables.getInnerMap(); Iterator<String> it = source.keySet().iterator(); StringBuilder urlVariables = new StringBuilder(); while (it.hasNext()) { String key = it.next(); String value = ""; Object object = source.get(key); if (object != null) { if (!StringUtils.isEmpty(object.toString())) { value = object.toString(); } } urlVariables.append("&").append(key).append("=").append(value); } // 去掉第一個& return urlVariables.substring(1); } }
調用:
JSONObject param = new JSONObject(); param.put("electronicId",fpqqlsh); JSONObject resObj = null; try { HttpHeaders headers = new HttpHeaders(); RestTemplate restTemplate = new RestTemplate(); headers.add("X-APP-ID",provinceAppId); headers.add("X-APP-KEY",provinceAppKey); // headers.add("X-CTG-Request-Id",UUID.randomUUID()+""); log.info("調用查詢接口入參:{}", param); ResponseEntity<String> resEntity = RestUtil.request(provinceQueryInvoiceUrl, HttpMethod.GET, headers, param, null, String.class); String body = resEntity.getBody(); log.info("調用查詢接口返回:{}", body); resObj = JSON.parseObject(body); } catch (Exception e) { log.error("調用查詢接口異常:{},異常入參:{}",e.toString(),param); e.printStackTrace(); throw e; }