Java调用第三方WebApi
使用 HttpClent调用
mport com.alibaba.fastjson2.JSONObject; import com.github.pagehelper.PageInfo; import com.sail.common.core.constant.HttpStatus; import com.sail.common.core.web.page.TableDataInfo; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Map; import java.util.Set; import java.util.*; public class KingdeeToken { private static final Logger log = LoggerFactory.getLogger(KingdeeToken.class); /** * 金蝶服务器IP */ public static String ip=""; /** * 金蝶授权码 */ public static String authorityCode=""; /** * Token有效期s */ public static int tokenvValidity=0; /** * 最多要展示的条数 */ public static int top=100; // 存储API Key和它的过期时间 private static String originalToken = "";//原始apikey private static Map<String, Date> tokenCache = new HashMap<>(); // 判断API Key是否过期 private static void getValidApiKey() { Date now = new Date(); Date expirationTime = tokenCache.get(originalToken); // 如果缓存中没有或者已过期,则重新缓存 if (expirationTime == null || now.after(expirationTime)) { // 设置60分钟后的过期时间 Date newExpirationTime = new Date(now.getTime() + tokenvValidity * 1000L); originalToken=GetNewApiKey(); tokenCache = new HashMap<>();//重新初始化 tokenCache.put(originalToken, newExpirationTime);//把最新的Token缓存起来 } } /** * @param url 请求的url * @param map 请求时参数会自动变为key1=value1&key2=value2,contentType也会自动变为application/x-www-form-urlencoded * @return 获取相应内容 */ //map入参 public static String PostUrlEncoded(String url, Map<String, String> map) throws IOException { //创建httpClient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); //创建请求方法的实例 HttpPost httpPost = new HttpPost(); try { httpPost.setURI(new URI(url)); } catch (URISyntaxException e) { e.getMessage(); } //设置传输超时时间 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(30000).setConnectTimeout(30000).build(); httpPost.setConfig(requestConfig); //添加请求参数 ArrayList<NameValuePair> arrayList = new ArrayList<>(); Set<Map.Entry<String, String>> entrySet = map.entrySet(); for (Map.Entry<String, String> entry : entrySet) { String key = entry.getKey(); String value = entry.getValue(); arrayList.add(new BasicNameValuePair(key, value)); } httpPost.setEntity(new UrlEncodedFormEntity(arrayList)); //发送http请求 CloseableHttpResponse response = httpClient.execute(httpPost); //获取返回的内容 String result; int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == 200) { result = EntityUtils.toString(response.getEntity()); } else { log.info("请求接口出现错误,状态码为:{}", statusCode); return null; } return result; } /** * 封装POST请求(String入参) * * @param url 请求的路径 * @param data String类型json格式数据 * @return 获取相应内容 */ public static String postJson(String url, String data) throws IOException { //创建HttpClient对象 HttpClient httpClient = HttpClientBuilder.create().build(); //创建请求方式的实例 HttpPost httpPost = new HttpPost(url); //添加请求参数(设置请求和传输超时时间) RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build(); httpPost.setConfig(requestConfig); //设置请求头 httpPost.setHeader("Accept", "application/json"); httpPost.setHeader("Content-Type", "application/json"); //设置请求参数 httpPost.setEntity(new StringEntity(data, "UTF-8")); //发送Http请求 HttpResponse response = httpClient.execute(httpPost); //获取返回的内容 String result; int statusCode = response.getStatusLine().getStatusCode(); if (200 == statusCode) { result = EntityUtils.toString(response.getEntity()); } else { log.info("请求接口出现错误,状态码为:{}", statusCode); return null; } return result; } /** * 封装GET请求 * * @param url 请求地址 * @return 相应内容 */ public static String get(String url) throws IOException { //1、创建HttpClient对象 HttpClient httpClient = HttpClientBuilder.create().build(); //2、创建请求方式的实例 HttpGet httpGet = new HttpGet(url); //3、添加请求参数(设置请求和传输超时时间) RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build(); httpGet.setConfig(requestConfig); //4、发送Http请求 HttpResponse response = httpClient.execute(httpGet); //5、获取返回的内容 String result; int statusCode = response.getStatusLine().getStatusCode(); if (200 == statusCode) { result = EntityUtils.toString(response.getEntity()); } else { log.info("请求接口出现错误,状态码为:{}", statusCode); return null; } return result; } /** * 获取金蝶的Token * @return */ public static String GetNewApiKey(){ String result=""; String urlStr="http://"+ip+"/K3API/Token/Create?authorityCode="+authorityCode; try{ result=get(urlStr); JSONObject jsonObject = JSONObject.parseObject(result); JSONObject data = jsonObject.getJSONObject("Data"); originalToken= data.getString("Token"); }catch (Exception e){ log.error("请求异常", e); } return originalToken; } /** * 金蝶的Get方法 * @param httpUrl * @return */ public static String doGetKis(String httpUrl){ getValidApiKey(); httpUrl="http://"+ip+httpUrl+"?token"+originalToken; try { return get(httpUrl); } catch (IOException e) { throw new RuntimeException(e); } } /** * 金蝶的Post方法 * @param httpUrl * @param param * @return */ public static String doPostKis(String httpUrl, String param){ getValidApiKey(); httpUrl="http://"+ip+httpUrl+"?token="+originalToken; String rst= null; try { rst = postJson(httpUrl, param); } catch (IOException e) { throw new RuntimeException(e); } return rst; } public static TableDataInfo getDataTable(List<?> list,int total) { TableDataInfo rspData = new TableDataInfo(); rspData.setCode(HttpStatus.SUCCESS); rspData.setRows(list); rspData.setMsg("查询成功"); rspData.setTotal(total); return rspData; } }
调用
ObjectMapper mapper = new ObjectMapper(); String jsonResult = mapper.writeValueAsString(queryData); result=KingdeeToken.doPostKis(url,jsonResult); listReturnMain = JSON.parseObject(result, ListReturnMain.class);
其他
|
作者:chenze 出处:https://www.cnblogs.com/chenze-Index/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |

浙公网安备 33010602011771号