java请求post接口&单例类实现缓存数据

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值