java-呼叫Restful介面工具
阿新 • • 發佈:2021-08-08
import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.http.*; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.client.RestTemplate; import java.nio.charset.StandardCharsets; import java.util.Iterator; import java.util.Map; /** * 呼叫 Restful 介面 Util * * @author sunjianlei */ @Slf4j public class RestUtil { private static String domain = null; public static String getDomain() { if (domain == null) { domain = SpringContextUtils.getDomain(); } return domain; } public static String path = null; public static String getPath() { if (path == null) { path = SpringContextUtils.getApplicationContext().getEnvironment().getProperty("server.servlet.context-path"); } return oConvertUtils.getString(path); } public static String getBaseUrl() { String basepath = getDomain() + getPath(); log.info(" RestUtil.getBaseUrl: " + basepath); return basepath; } /** * RestAPI 呼叫器 */ private final static RestTemplate RT; static { SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setConnectTimeout(3000); requestFactory.setReadTimeout(3000); RT = new RestTemplate(requestFactory); // 解決亂碼問題 RT.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); } 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, Object params, Class<T> responseType) { log.info(" RestUtil --- request --- url = "+ url); 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) { if (params instanceof JSONObject) { body = ((JSONObject) params).toJSONString(); } else { body = params.toString(); } } // 拼接 url 引數 if (variables != null) { url += ("?" + asUrlVariables(variables)); } // 傳送請求 HttpEntity<String> request = new HttpEntity<>(body, headers); return RT.exchange(url, method, request, responseType); } /** * 獲取JSON請求頭 */ public static HttpHeaders getHeaderApplicationJson() { return getHeader(MediaType.APPLICATION_JSON_UTF8_VALUE); } /** * 獲取請求頭 */ public static HttpHeaders getHeader(String mediaType) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.parseMediaType(mediaType)); headers.add("Accept", mediaType); return 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); } }
本文來自部落格園,作者:openlims,轉載請註明原文連結:https://www.cnblogs.com/openlims/p/15115815.html