package utils; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.util.LinkedMultiValueMap; import org.springframework.web.client.RestTemplate; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author JP * @createTime 2021/9/23 */ public class ThirdApiCaller { private static final String FORM_CONTENT_TYPE = "application/x-www-form-urlencoded"; private static final String JSON_CONTENT_TYPE = "application/json;charset=utf8"; private static final String XML_CONTENT_TYPE = "application/xml;charset=utf8"; private static RestTemplate REST_TEMPLATE; static { RestTemplate restTemplate = new RestTemplate(); List> list = restTemplate.getMessageConverters(); for (HttpMessageConverter httpMessageConverter:list){ if (httpMessageConverter instanceof StringHttpMessageConverter){ ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(StandardCharsets.UTF_8); } } REST_TEMPLATE = restTemplate; } /** * FORM形式 * * @param url * @param body * @param header * @param clazz * @param * @return */ public static T postForm(String url, LinkedMultiValueMap body, Map header, Class clazz) { try { HttpHeaders httpHeaders = createFormHttpHeaders(header); body = body == null ? new LinkedMultiValueMap() : body; return REST_TEMPLATE.postForObject(url, new HttpEntity(body, httpHeaders), clazz); } catch (Exception e) { throw e; } } /** * JSON形式 * * @param url * @param body * @param header * @param clazz * @param * @return */ public static T postJson(String url, Object body, Map header, Class clazz) { try { HttpHeaders httpHeaders = createJsonHttpHeaders(header); body = body == null ? new HashMap() : body; return REST_TEMPLATE.postForObject(url, new HttpEntity(body, httpHeaders), clazz); } catch (Exception e) { throw e; } } public static T postXml(String url, Object body, Map header, Class clazz) { try { HttpHeaders httpHeaders = createXmlHttpHeaders(header); body = body == null ? new HashMap() : body; return REST_TEMPLATE.postForObject(url, new HttpEntity(body, httpHeaders), clazz); } catch (Exception e) { throw e; } } private static HttpHeaders createFormHttpHeaders(Map header) { HttpHeaders headers = new HttpHeaders(); if (header != null) { for (Map.Entry entry : header.entrySet()) { headers.add(entry.getKey(), entry.getValue()); } } headers.add("Content-Type", FORM_CONTENT_TYPE); return headers; } private static HttpHeaders createJsonHttpHeaders(Map header) { HttpHeaders headers = new HttpHeaders(); if (header != null) { for (Map.Entry entry : header.entrySet()) { headers.add(entry.getKey(), entry.getValue()); } } headers.add("Content-Type", JSON_CONTENT_TYPE); return headers; } private static HttpHeaders createXmlHttpHeaders(Map header) { HttpHeaders headers = new HttpHeaders(); if (header != null) { for (Map.Entry entry : header.entrySet()) { headers.add(entry.getKey(), entry.getValue()); } } headers.add("Content-Type", XML_CONTENT_TYPE); return headers; } }