package utils; import com.mycim.framework.utils.lang.StringUtils; import com.mycim.framework.utils.msg.JsonUtils; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; 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; 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 final String XML_TEXT_CONTENT_TYPE = "text/xml;charset=UTF-8"; private static final String NAME_SPACE = "http://xml.fa-software.com/mycim/wsdd/"; private static final String SERVICE = "execute"; private static final String SUBSTR_START = ""; private static final String SUBSTR_END = ""; 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 String postForWS(String url, Map body) { try { // 创建对象用于xml的拼接 HttpHeaders headers = new HttpHeaders(); MediaType mediaType = MediaType.parseMediaType(XML_TEXT_CONTENT_TYPE); headers.setContentType(mediaType); String soapRequestData = "" + "" + "" + "" + "" + JsonUtils.toString(body) + "" + "" + "" + ""; HttpEntity httpEntity = new HttpEntity<>(soapRequestData, headers); return substrResponse(REST_TEMPLATE.postForObject(url, httpEntity, String.class)); } 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; } private static String substrResponse(String result){ if (StringUtils.isNotBlank(result) && result.contains(SUBSTR_START) && result.contains(SUBSTR_END)){ result = StringUtils.substringBetween(result, SUBSTR_START, SUBSTR_END); } return result; } }