java请求post接口
代码
package org.springblade.business.utils;
import com.alibaba.fastjson.JSONArray;
import dm.jdbc.filter.stat.json.JSONObject;
import lombok.AllArgsConstructor;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.springblade.business.entity.Person;
import org.springblade.business.service.IPersonService;
import org.springblade.core.log.logger.BladeLogger;
import org.springblade.core.tool.jackson.JsonUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.*;
/**
* @Description:
* @author: guo-xz
* @Project:
* @Date: 2022年09月20日 08:29
*/
@AllArgsConstructor
@Component
public class APIResult {
final BladeLogger logger;
final IPersonService service;
/**
* @desc: post请求获取数据
* @author: guo-xz
* @date: 2022/9/20
* @param: postUrl
* @param param
* @return: String
**/
public String getAPIResultParams(String postUrl, JSONObject param){
// 拼接最终的测试地址
// 声明一个client对象,用来进行方法的执行并设置cookies信息
CloseableHttpClient client = HttpClients.createDefault();
// 声明一个post方法
HttpPost httpPost = new HttpPost(postUrl);
// 设置请求头信息
httpPost.setHeader("content-type","application/json");
// 将参数信息添加到方法中
StringEntity entity = new StringEntity(param.toString(),"utf-8");
httpPost.setEntity(entity);
HttpParams params = new BasicHttpParams();
params.setParameter("message_data","{ \"token\": \"f2931ae40d0d454f86dcd4e97537b265\"}");
httpPost.setParams(params);
// 声明一个对象用来存储响应结果
String result;
// 执行post方法
HttpResponse httpResponse = null;
try {
httpResponse = client.execute(httpPost);
// 获取响应结果
result = EntityUtils.toString(httpResponse.getEntity(),"utf-8");
return result;
} catch (IOException e) {
logger.error( "post请求:" + postUrl, e.getMessage());
}
return null;
}
/**
* @desc: post请求获取数据
* @author: guo-xz
* @date: 2022/9/20
* @param: postUrl
* @param sparam
* @return: String
**/
public String getAPIResultParamsJson(String postUrl, String sparam){
//提交参数
// 声明一个client对象,用来进行方法的执行并设置cookies信息
CloseableHttpClient client = HttpClients.createDefault();
// 声明一个post方法
HttpPost httpPost = new HttpPost(postUrl + "?" + sparam);
config(httpPost);
// 设置请求头信息
httpPost.setHeader("content-type","application/json");
// 声明一个对象用来存储响应结果
String result;
// 执行post方法
HttpResponse httpResponse = null;
try {
httpResponse = client.execute(httpPost);
// 获取响应结果
result = EntityUtils.toString(httpResponse.getEntity(),"utf-8");
return result;
} catch (IOException e) {
logger.error( "post请求:" + postUrl, e.getMessage());
}
return null;
}
/**
* @desc: post请求获取数据
* @author: guo-xz
* @date: 2022/9/20
* @param: postUrl
* @param sparam
* @return: String
**/
public String getAPIResultParamsPinJie(String postUrl, String sparam){
// 拼接最终的测试地址
// 声明一个client对象,用来进行方法的执行并设置cookies信息
CloseableHttpClient client = HttpClients.createDefault();
// 声明一个post方法
HttpPost httpPost = new HttpPost(postUrl + "?" + sparam);
// HttpPost httpPost = new HttpPost(postUrl + "?" + "message_data=%7B%20%20%20%22token%22:%20%22f2931ae40d0d454f86dcd4e97537b265%22%7D");
// HttpPost httpPost = new HttpPost(postUrl + "?" + "message_data=%7Btoken%3Df2931ae40d0d454f86dcd4e97537b265%7D");
config(httpPost);
// 设置请求头信息
httpPost.setHeader("content-type","application/json");
// 声明一个对象用来存储响应结果
String result;
// 执行post方法
HttpResponse httpResponse = null;
try {
httpResponse = client.execute(httpPost);
// 获取响应结果
result = EntityUtils.toString(httpResponse.getEntity(),"utf-8");
return result;
} catch (IOException e) {
logger.error( "post请求:" + postUrl, e.getMessage());
}
return null;
}
/**
* @desc: post请求获取数据
* @author: guo-xz
* @date: 2022/9/20
* @param: postUrl
* @return: String
**/
public String getAPIResult(String postUrl){
// 声明一个client对象,用来进行方法的执行并设置cookies信息
CloseableHttpClient client = HttpClients.createDefault();
// 声明一个post方法
HttpPost httpPost = new HttpPost(postUrl);
// 设置请求头信息
httpPost.setHeader("content-type","application/json");
// 声明一个对象用来存储响应结果
String result;
try {
// 执行post方法
HttpResponse httpResponse = client.execute(httpPost);
// 获取响应结果
result = EntityUtils.toString(httpResponse.getEntity(),"utf-8");
return result;
} catch (IOException e) {
logger.error( "post请求:" + postUrl, e.getMessage());
}
return null;
}
/**
* @param httpRequestBase
*/
private void config(HttpRequestBase httpRequestBase) {
httpRequestBase.setHeader("User-Agent", "Mozilla/5.0");
httpRequestBase.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
httpRequestBase.setHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");//"en-US,en;q=0.5");
httpRequestBase.setHeader("Accept-Charset", "ISO-8859-1,utf-8,gbk,gb2312;q=0.7,*;q=0.7");
httpRequestBase.setHeader("connection", "Keep-Alive");
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(10000)
.setConnectTimeout(10000)
.setSocketTimeout(10000)
.build();
httpRequestBase.setConfig(requestConfig);
}
/**
* @desc: 转义参数
* @author: guo-xz
* @date: 2022/9/30
* @param: params
* @return: String
**/
private String patamsUtils(Map<String, Object> params){
//提交参数
List<NameValuePair> nvps = new ArrayList<>();
if(params != null){
Set<String> keySet = params.keySet();
for(String key:keySet){
nvps.add(new BasicNameValuePair(key, params.get(key).toString()));
}
}
// 拼接最终的测试地址
// 声明一个client对象,用来进行方法的执行并设置cookies信息
UrlEncodedFormEntity uefEntity = null;
try {
uefEntity = new UrlEncodedFormEntity(nvps,"UTF-8");
uefEntity.setContentType("application/x-www-form-urlencoded");
return EntityUtils.toString(uefEntity);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* @desc: 获取全部人员信息接口
* @author: guo-xz
* @date: 2022/9/20
* @param:
* @return:
**/
@PostConstruct
public void getAllPersons(){
String postUrl = "http://15.109.250.40/hotlineRecordInterface/handle/GetAllPersons.ashx";
// 添加参数
Map<String, Object> param = new HashMap<>();
Map<String, Object> paramChilden = new HashMap<>();
paramChilden.put("token", "f2931ae40d0d454f86dcd4e97537b265");
String jsonDataStr = JsonUtil.toJson(paramChilden);
param.put("message_data", jsonDataStr);
// TODO 亚微提供接口ip访问不到,暂时使用测试数据
String result = getAPIResultParamsJson(postUrl, patamsUtils(param));
/*String result2 = "{" +
"\"code\": \"200\","+
"\"info\": \"成功\"," +
"\"data\": [" +
"{ \"name\": \"话务员姓名1\", \"gonghao\": \"1055\"}," +
"{ \"name\": \"话务员姓名2\", \"gonghao\": \"1233\"}," +
"{ \"name\": \"话务员姓名3\", \"gonghao\": \"1256\"}," +
"{ \"name\": \"话务员姓名4\", \"gonghao\": \"1056\"}," +
"{ \"name\": \"话务员姓名5\", \"gonghao\": \"1217\"}," +
"{ \"name\": \"话务员姓名6\", \"gonghao\": \"1112\"}," +
"{ \"name\": \"话务员姓名7\", \"gonghao\": \"1176\"}," +
"{ \"name\": \"话务员姓名8\", \"gonghao\": \"1262\"}," +
"{ \"name\": \"话务员姓名9\", \"gonghao\": \"0\"}," +
"{ \"name\": \"话务员姓名9\", \"gonghao\": \"1189\"}," +
"{ \"name\": \"话务员姓名10\", \"gonghao\": \"1051\"}," +
"]" +
"}";*/
if(Func.isNoneBlank(result)){
// 判断返回结果是否符合预期
// 将返回结果字符串转换成json对象
logger.info( "getAllPersons:", "获取所有人员");
JSONObject resultJson = new JSONObject(result);
// 获取到结果值
String code = resultJson.getString("code");
if(code.equals("200")){
// 声明单例类对象
CacheSingletonUtil cacheSingletonUtil = CacheSingletonUtil.getInstance();
// 把获取的数据转成list
List<Map> list = (List<Map>) JSONArray.parse(resultJson.get("data") + "");
List<Person> persons = new ArrayList<>();
Person person = null;
for (Map item : list){
person = new Person();
// 获取的工号姓名以键值对的形式存储到单例类中
cacheSingletonUtil.addCacheData(String.valueOf(item.get("gonghao")), String.valueOf(item.get("name")));
person.setName(String.valueOf(item.get("name")));
person.setDeviceNo(String.valueOf(item.get("gonghao")));
persons.add(person);
}
//判断是否删除所有人员
boolean isDelete = service.deleteAllPerson();
if(isDelete){
// 批量保存人员
service.saveBatch(persons);
}
}
}
}
/**
* @desc: 根据工号获取人员
* @author: guo-xz
* @date: 2022/9/20
* @param:
* @return:
**/
public void getAllPersonsByGongHao(String[] gonghao){
String postUrl = "http://15.109.250.40/hotlineRecordInterface/handle/GetPersonsByGonghao.ashx";
// 添加参数
// 获取响应结果
// 如果不填写此转换格式,地址中包含 空格内容 转换失败,会出现下面的异常
String spramsGOnghao = "message_data=%7B%20%20%20%22token%22:%20%22f2931ae40d0d454f86dcd4e97537b265%22," +
"%22gonghao%22:%20[%22110%22,%22147%22]" +
"%7D";
String result = getAPIResultParamsPinJie(postUrl, spramsGOnghao);
// 判断返回结果是否符合预期
logger.info( "getAllPersonsByGongHao:", "根据工号获取人员");
// 将返回结果字符串转换成json对象
JSONObject resultJson = new JSONObject(result);
// 获取到结果值
String code = resultJson.getString("code");
if(code.equals("200")){
// 声明单例类对象
CacheSingletonUtil cacheSingletonUtil = CacheSingletonUtil.getInstance();
// 把获取的数据转成list
List<Map> list = (List<Map>) JSONArray.parse(resultJson.get("data") + "");
for (Map item : list){
// 获取的工号姓名以键值对的形式存储到单例类中
cacheSingletonUtil.addCacheData(String.valueOf(item.get("gonghao")), String.valueOf(item.get("name")));
}
}
}
/**
* @desc: 某时间段(工单录入时间)内工单量接口获取
* @author: guo-xz
* @date: 2022/9/20
* @param:
* @return:
**/
public List<Map> getPersonsCount(String startTime, String endTime){
String postUrl = "http://15.109.250.40/hotlineRecordInterface/handle/GetPersonsCount.ashx";
// 添加参数
Map<String, Object> param = new HashMap<>();
Map<String, Object> paramChilden = new HashMap<>();
paramChilden.put("token", "f2931ae40d0d454f86dcd4e97537b265");
// startTime = "2022-08-01 00:00:00";
// endTime = "2022-09-01 00:00:00";
paramChilden.put("startTime", startTime);
paramChilden.put("endTime", endTime);
String jsonDataStr = JsonUtil.toJson(paramChilden);
param.put("message_data", jsonDataStr);
// 获取响应结果
// 如果不填写此转换格式,地址中包含 空格内容 转换失败,会出现下面的异常
String result = getAPIResultParamsJson(postUrl, patamsUtils(param));
/*String result = "{" +
"\"code\": \"200\","+
"\"info\": \"成功\"," +
"\"data\": [" +
"{ \"name\": \"话务员姓名1\", \"gonghao\": \"1055\", \"count\": \"55\"}," +
"{ \"name\": \"话务员姓名2\", \"gonghao\": \"1056\", \"count\": \"55\"}," +
"{ \"name\": \"话务员姓名3\", \"gonghao\": \"1057\", \"count\": \"55\"}," +
"{ \"name\": \"话务员姓名4\", \"gonghao\": \"1105\", \"count\": \"55\"}," +
"{ \"name\": \"话务员姓名5\", \"gonghao\": \"1112\", \"count\": \"55\"}," +
"{ \"name\": \"话务员姓名6\", \"gonghao\": \"1113\", \"count\": \"55\"}," +
"{ \"name\": \"话务员姓名7\", \"gonghao\": \"1176\", \"count\": \"55\"}," +
"{ \"name\": \"话务员姓名8\", \"gonghao\": \"1262\", \"count\": \"55\"}," +
"{ \"name\": \"话务员姓名9\", \"gonghao\": \"0\", \"count\": \"0\"}," +
"{ \"name\": \"话务员姓名10\", \"gonghao\": \"1051\", \"count\": \"55\"}," +
"]" +
"}";*/
// 判断返回结果是否符合预期
// 将返回结果字符串转换成json对象
logger.info( "getPersonsCount:", "工单量接口获取");
JSONObject resultJson = new JSONObject(result);
// 获取到结果值
String code = resultJson.getString("code");
if(code.equals("200")){
// 把获取的数据转成list
return (List<Map>) JSONArray.parse(resultJson.get("data") + "");
}else{
return null;
}
}
}
单例类实现缓存数据
代码
package org.springblade.business.utils;
import org.springblade.core.tool.utils.Func;
import java.util.HashMap;
import java.util.Map;
/**
* @Description:
* @author: guo-xz
* @Project:
* @Date: 2022年09月20日 09:03
*/
public class CacheSingletonUtil {
private static volatile CacheSingletonUtil cacheSingletonUtil;
private static Map<String,String> cacheSingletonMap;
private CacheSingletonUtil(){
cacheSingletonMap = new HashMap<String, String>();
}
/*
* 单例模式有两种类型
* 懒汉式:在真正需要使用对象时才去创建该单例类对象
* 饿汉式:在类加载时已经创建好该单例对象,等待被程序使用
*/
// 懒汉式单例模式
public static CacheSingletonUtil getInstance(){
// 线程A和线程B同时看到cacheSingletonUtil = null,如果不为null,则直接返回cacheSingletonUtil
if (cacheSingletonUtil == null){
// 线程A或线程B获得该锁进行初始化
synchronized (CacheSingletonUtil.class) {
// 其中一个线程进入该分支,另外一个线程则不会进入该分支
if (cacheSingletonUtil == null) {
cacheSingletonUtil = new CacheSingletonUtil();
}
}
}
return cacheSingletonUtil;
}
/**
* 添加到内存
*/
public void addCacheData(String key,String val){
cacheSingletonMap.put(key,val);
}
/**
* 从内存中取出
*/
public String getCacheData(String key){
String val = cacheSingletonMap.get(key);
if(Func.isNoneBlank(val)){
return val;
}
else{
String[] gonghao = {key};
APIResult.getAllPersonsByGongHao(gonghao);
val = cacheSingletonMap.get(key);
return val;
}
}
/**
* 从内存中清除
*/
public void removeCacheData(String key){
cacheSingletonMap.remove(key);
}
}