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;
}
}