第三方接口转换工具类
转换示例:
{“retCode#int”: “code”, “parkInfo#data”: [{“dataType#int”: “DATA_TYPE”, “parkingId#int”: “PARKING_ID”, “realBerth#int”: “REAL_BERTH”, “address#string”: “ADDRESS”, “markExpiry#int”: “MARK_EXPIRY”, “monthBerth#int”: “MONTH_BERTH”, “totalBerth#int”: “TOTLA_BERTH”, “dataTime#string”: “DATA_TIME”, “batteryBerth#int”: “BATTERY_BERTH”, “leaderTel#string”: “LEADER_TEL”, “nobarryBerth#int”: “NOBARRY_BERTH”, “onlinePay#string”: “ONLINE_PAY”, “serverTel#string”: “SERVER_TEL”, “districtId#string”: “DISTRICT_ID”, “leaderName#string”: “LEADER_NAME”, “parkingStatus#int”: “PARKING_STATUS”, “recodeMark#string”: “RECORD_MARK”, “rentExpiry#string”: “RENT_EXPIRY”, “serverTime#string”: “SERVER_TIME”, “serverType#string”: “SERVER_TYPE”, “supplierId#string”: “SUPPLIER_ID”, “transferBerth#int”: “TRANSFER_BERTH”, “updateTime#string”: “UPDATE_TIME”, “estatesName#string”: “ESTATES_NAME”, “parkingArea#string”: “PARKING_AREA”, “parkingName#string”: “PARKING_NAME”, “manageCodeId#string”: “MANAGECODE_ID”, “companyManage#string”: “COMPANY_MANAGE”, “complainedTel#string”: “COMPLAINED_TEL”, “parkingNature#string”: “PARKING_NATURE”, “cityCode#string#const”: “310000”, “parkingEstates#string”: “PARKING_ESTATES”, “parkingProperty#string”: “PARKING_PROPERTY”}], “retMsg#string”: “message”}
/**
@author chenxiaoyang
@description: 字段转换工具
@dATE:2021/12/8 18:45
*/
public class ProtocolConvertUtil {private Logger log = LoggerFactory.getLogger(ProtocolConvertUtil.class);
@Autowired
DataTypeManageContext dataTypeManageContext;@Autowired
ComponentConfigs componentConfigs;/*
- 转换参数,组合参数赋值结果
*/
public Map<String, Object> convertParam(Map<String, Object> sourceParam,
Map<String, Object> interfaceParamConfigMap) {
Map<String, Object> result = new HashMap<>();
//遍历替换值
for (Map.Entry<String, Object> m : interfaceParamConfigMap.entrySet()) {
String paramKey = m.getKey();
Object sourceField = m.getValue();
createValue(sourceParam, paramKey, result, sourceField);
}
return result;
}
/*
- 组装值
*/
public void createValue(Map<String, Object> sourceParam, String paramKey, Map<String, Object> result,
Object sourceField) {
String[] paramKeys = paramKey.split(“#”);
//不带#可能是map或者List,直接组装值
if (sourceField instanceof String) {
//如果paramKeys长度为3,那可能是特殊的值,目前仅考虑常量const
String valueType = paramKeys[1];
ConvertData convertData = dataTypeManageContext.getDataBaseUtil(valueType);
Object obj = null;
if (paramKeys.length == 2) {
//数据转换
obj = getSingleValue(sourceParam, (String) sourceField);
result.put(paramKeys[0], obj != null ? convertData.convertValue(obj) : null);
} else if (paramKeys.length == 3 && “const”.equals(paramKeys[2])) {
obj = sourceField;
result.put(paramKeys[0], obj != null ? convertData.convertValue(obj) : null);
}
} else if (sourceField instanceof Map) {
String sourceKey = paramKeys[1];
Map<String, Object> m = new HashMap<>();
for (Map.Entry<String, Object> s : ((Map<String, Object>) sourceField).entrySet()) {
String sKey = s.getKey();
Object sField = s.getValue();
createValue((Map<String, Object>) sourceParam.get(sourceKey), sKey, m, sField);
}
result.put(paramKeys[0], m);
} else if (sourceField instanceof List) {
String sourceKey = paramKeys[1];
//获取源数据里的List进行遍历
Map<String, Object> sourceMapping = (Map<String, Object>) ((List) sourceField).get(0);
//组装List的值
List<Map<String, Object>> mapList = createListDataValue(sourceMapping, sourceParam, sourceKey);
result.put(paramKeys[0], mapList);
}
}
/*
- 组装List的值
*/
public List<Map<String, Object>> createListDataValue(Map<String, Object> sourceMapping, Map<String, Object> sourceParam,
String sourceKey) {
//组装List值用的
List<Map<String, Object>> mapList = new ArrayList<>();
List<Map<String, Object>> sourceDataList = (List<Map<String, Object>>) sourceParam.get(sourceKey);
if (CollectionUtils.isEmpty(sourceDataList)) return null;
for (Map<String, Object> a : sourceDataList) {
Map<String, Object> v = new HashMap<>();
createListInnerData(v, sourceMapping, a);
mapList.add(v);
}
return mapList;
}
public void createListInnerData(Map<String, Object> v, Map<String, Object> sourceMapping,
Map<String, Object> data) {
for (Map.Entry<String, Object> c : sourceMapping.entrySet()) {
String sKey = c.getKey();
Object sField = c.getValue();
createValue(data, sKey, v, sField);
}
}/*
- 组装最终的值
*/
public Object getSingleValue(Map<String, Object> sourceParam, String sourceField) {
Object obj = sourceParam.get(sourceField);
return obj;
}
public InterfaceBaseConfig getInterfaceBaseConfig(String interfaceBusinessId) {
InterfaceBaseConfig interfaceBaseConfig = componentConfigs.interfaceBaseConfigMap.get(interfaceBusinessId);
return interfaceBaseConfig;
}public Map<String, Object> getInterfaceParamConfigMap(int paramType, int interfaceId) {
Map<String, Object> interfaceParamConfigMap = null;
if (paramType == ParamTypeEnum.INPUT.code) {
interfaceParamConfigMap = componentConfigs.interfaceInputJsonParamConfigMap.get(interfaceId);
} else {
interfaceParamConfigMap = componentConfigs.interfaceOutputJsonParamConfigMap.get(interfaceId);
}
return interfaceParamConfigMap;
}/*
- 根据JSON进行数据转换
*/
public Map<String, Object> convertJsonParamForInputParam(Map<String, Object> sourceParam,
String interfaceBusinessId) {
try {
InterfaceBaseConfig interfaceBaseConfig = getInterfaceBaseConfig(interfaceBusinessId);
if (interfaceBaseConfig == null) return null;
Map<String, Object> interfaceParamConfigMap = getInterfaceParamConfigMap(ParamTypeEnum.INPUT.code,
interfaceBaseConfig.getId());
return convertParam(sourceParam, interfaceParamConfigMap);
} catch (Exception e) {
log.error(“转换错误:{}”, e);
throw e;
}
}
/*
- 根据JSON进行数据转换
*/
public Map<String, Object> convertJsonParamForOutputParam(Map<String, Object> sourceParam,
String interfaceBusinessId) {
try {
InterfaceBaseConfig interfaceBaseConfig = getInterfaceBaseConfig(interfaceBusinessId);
if (interfaceBaseConfig == null) return null;
Map<String, Object> interfaceParamConfigMap = getInterfaceParamConfigMap(ParamTypeEnum.OUTPUT.code,
interfaceBaseConfig.getId());
return convertParam(sourceParam, interfaceParamConfigMap);
} catch (Exception e) {
log.error(“转换错误:{}”, e);
throw e;
}
}
/*
- 根据JSON进行数据转换
*/
public void convertToProtoBufForJsonInputParam(Map<String, Object> sourceParam,
String interfaceBusinessId, Message.Builder message) {
try {
InterfaceBaseConfig interfaceBaseConfig = getInterfaceBaseConfig(interfaceBusinessId);
if (interfaceBaseConfig == null) return;
Map<String, Object> interfaceParamConfigMap = getInterfaceParamConfigMap(ParamTypeEnum.INPUT.code,
interfaceBaseConfig.getId());
Map<String, Object> paramMap = convertParam(sourceParam, interfaceParamConfigMap);
JsonUtil.mapToProtoBuf(paramMap, message);
} catch (Exception e) {
log.error(“转换错误:{}”, e);
throw e;
}
}
/*
- 根据JSON进行数据转换
*/
public void convertToProtoBufForJsonOutputParam(Map<String, Object> sourceParam,
String interfaceBusinessId, Message.Builder message) {
try {
InterfaceBaseConfig interfaceBaseConfig = getInterfaceBaseConfig(interfaceBusinessId);
if (interfaceBaseConfig == null) return;
Map<String, Object> interfaceParamConfigMap = getInterfaceParamConfigMap(ParamTypeEnum.OUTPUT.code,
interfaceBaseConfig.getId());
Map<String, Object> paramMap = convertParam(sourceParam, interfaceParamConfigMap);
JsonUtil.mapToProtoBuf(paramMap, message);
} catch (Exception e) {
log.error(“转换错误:{}”, e);
throw e;
}
}
/*
- 根据JSON进行数据转换
*/
public Map<String, Object> convertJsonParamForInputParam(String sourceJson,
String interfaceBusinessId) {
try {
Map<String, Object> sourceParam = Json.toHashMap(sourceJson);
InterfaceBaseConfig interfaceBaseConfig = getInterfaceBaseConfig(interfaceBusinessId);
if (interfaceBaseConfig == null) return null;
Map<String, Object> interfaceParamConfigMap = getInterfaceParamConfigMap(ParamTypeEnum.INPUT.code,
interfaceBaseConfig.getId());
return convertParam(sourceParam, interfaceParamConfigMap);
} catch (Exception e) {
log.error(“转换错误:{}”, e);
throw e;
}
}
/*
- 根据JSON进行数据转换
*/
public Map<String, Object> convertJsonParamForOutputParam(String sourceJson,
String interfaceBusinessId) {
try {
Map<String, Object> sourceParam = Json.toHashMap(sourceJson);
InterfaceBaseConfig interfaceBaseConfig = getInterfaceBaseConfig(interfaceBusinessId);
if (interfaceBaseConfig == null) return null;
Map<String, Object> interfaceParamConfigMap = getInterfaceParamConfigMap(ParamTypeEnum.OUTPUT.code,
interfaceBaseConfig.getId());
return convertParam(sourceParam, interfaceParamConfigMap);
} catch (Exception e) {
log.error(“转换错误:{}”, e);
throw e;
}
}
/*
- 根据JSON进行数据转换
*/
public void convertToProtoBufForJsonInputParam(String sourceJson, String interfaceBusinessId,
Message.Builder message) {
try {
Map<String, Object> sourceParam = Json.toHashMap(sourceJson);
InterfaceBaseConfig interfaceBaseConfig = getInterfaceBaseConfig(interfaceBusinessId);
if (interfaceBaseConfig == null) return;
Map<String, Object> interfaceParamConfigMap = getInterfaceParamConfigMap(ParamTypeEnum.INPUT.code,
interfaceBaseConfig.getId());
Map<String, Object> paramMap = convertParam(sourceParam, interfaceParamConfigMap);
JsonUtil.mapToProtoBuf(paramMap, message);
} catch (Exception e) {
log.error(“转换错误:{}”, e);
throw e;
}
}
/*
- 根据JSON进行数据转换
*/
public void convertToProtoBufForJsonOutputParam(String sourceJson, String interfaceBusinessId,
Message.Builder message) {
try {
Map<String, Object> sourceParam = Json.toHashMap(sourceJson);
InterfaceBaseConfig interfaceBaseConfig = getInterfaceBaseConfig(interfaceBusinessId);
if (interfaceBaseConfig == null) return;
Map<String, Object> interfaceParamConfigMap = getInterfaceParamConfigMap(ParamTypeEnum.OUTPUT.code,
interfaceBaseConfig.getId());
Map<String, Object> paramMap = convertParam(sourceParam, interfaceParamConfigMap);
JsonUtil.mapToProtoBuf(paramMap, message);
} catch (Exception e) {
log.error(“转换错误:{}”, e);
throw e;
}
}
- 转换参数,组合参数赋值结果
// public void main(String[] args) {
// String interfaceString = “{\n” +
// ““retCode#int”: “code”,\n” +
// ““retMsg#string”: “message”,\n” +
// ““lineNo#string”:“lineNo”,\n” +
// ““data#datas”:[\n” +
// “{\n” +
// ““stationRunTimeModelList#stationRunTimeModelList”:[{\n” +
// " “stationId#string”:“stationId”,\n" +
// " “stationName#string”:“stationName”,\n" +
// ““upStationDetails#upStationDetailList”:[\n” +
// “{\n” +
// " “arriveStation#string”:“arriveStation”,\n" +
// " “arriveTime#string”:“arriveTime”,\n" +
// " “endStation#string”:“endStation”,\n" +
// " “endStationId#string”:“endStationId”,\n" +
// " “trainId#string”:“trainId”\n" +
// “}\n” +
// “],\n” +
// ““downStationDetails#downStationDetailList”:[{\n” +
// " “arriveStation#string”:“arriveStation”,\n" +
// " “arriveTime#string”:“arriveTime”,\n" +
// " “endStation#string”:“endStation”,\n" +
// " “endStationId#string”:“endStationId”,\n" +
// " “trainId#string”:“trainId”\n" +
// “}\n” +
// “]\n” +
// “}]\n” +
// “}]\n” +
// “\n” +
// “}”;
// String data = “{“code”:“1000”,“message”:“success”,“datas”:[{“lineNo”:“01”,“stationRunTimeModelList”:[{“stationId”:“0111”,“stationName”:“莘庄”,“transferId”:”“,“openDoor”:”“,“upStationDetailList”:[],“downStationDetailList”:[{“arriveStation”:”“,“arriveTime”:“2022-01-14 19:02:51”,“endStation”:“莘庄”},{“arriveStation”:”“,“arriveTime”:“2022-01-14 19:04:35”,“endStation”:“莘庄”},{“arriveStation”:”“,“arriveTime”:“2022-01-14 19:07:08”,“endStation”:“莘庄”}]},{“stationId”:“0112”,“stationName”:“外环路”,“transferId”:”“,“openDoor”:”“,“upStationDetailList”:[{“arriveStation”:”“,“arriveTime”:“2022-01-14 19:00:32”,“endStation”:“富锦路”}],“downStationDetailList”:[{“arriveStation”:”“,“arriveTime”:“2022-01-14 19:01:45”,“endStation”:“莘庄”},{“arriveStation”:”“,“arriveTime”:“2022-01-14 19:04:18”,“endStation”:“莘庄”},{“arriveStation”:”“,“arriveTime”:“2022-01-14 19:10:32”,“endStation”:“莘庄”}] }]}]}”;
// Map<String, Object> sourceParam = Json.toHashMap(data);
// Map<String, Object> interfaceParamConfigMap = Json.toHashMap(interfaceString);
// FlowMap result = convertParamToFlowMap(sourceParam,
// interfaceParamConfigMap);
// List list=result.nlm(“data”);
// System.out.println(Json.toJson(list));
// }
}
第三方接口转换工具类相关推荐
- android 单位转换工具,Android单位转换工具类
Android单位转换工具类 Android单位转换工具类主要由以下4部分构成 1.这个类不能被初始化 2.dip转px接口 3.sp转px接口 4.px转dip接口 代码如下: import and ...
- android 字体像素转换工具类_Android中px与dip,sp与dip等的转换工具类
Android中px与dip,sp与dip等的转换工具类 功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方 ...
- java gson 工具类_GSON 实体 转换工具类
/** * Gson转换工具类 */ public class GsonUtils { /** * @param jsonString * json字符串 * @param cl ...
- android 日期时间类,Android 日期时间等转换工具类
package com.easyder.util; import java.text.SimpleDateFormat; import java.util.Date; /** * 日期时间等转换工具类 ...
- android 字体像素转换工具类_android px,dp,sp大小转换工具
package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类 * * float s ...
- java 视频转码工具类_JavaCV入门指南:FrameConverter转换工具类及CanvasFrame图像预览工具类(javaCV教程完结篇)...
JavaCV入门指南:FrameConverter转换工具类及CanvasFrame图像预览工具类(javaCV教程完结篇) 前言 再此章之前,我们已经详细介绍和剖析了javacv的结构和ffmpeg ...
- java字体颜色编程_Java 字体颜色转换工具类 ColorUtil
Java 字体颜色转换工具类 ColorUtil,Java 字体颜色转换工具类 ColorUtil-- import java.awt.Color; import jxl.format.Colour; ...
- Java 字体颜色转换工具类 ColorUtil
import java.awt.Color; import jxl.format.Colour; /** *字体颜色转换工具类 * @author tanghui * */ pu ...
- 自定义java对象转换工具类
背景 项目中经常有VO.PO.DTO等之间转换,由于apache工具类中BeanUtils.copyProperties及Json序列化反序列化方式转换性能比较低(阿里巴巴规范检查有提示不建议采用). ...
最新文章
- matlab 二分法求方程近似解
- redis stream java消息队列_Redis-消息队列的两种实现方式
- “策小编数洞”开工啦,欢迎来唠两块钱儿的
- Auto.js Pro如何连接VS Code插件
- oracle数据库SQL入门
- python 元组 列表 字典区别_python编程:常用的数据结构之字典的方法总结,和列表和元组区别...
- [C++] Value Categories
- 【.net core 跨平台】第一步 在Ubuntu16.04 配置.net core环境
- elcipse开发android locat一会显示一会消失的问题
- 工作流程管理的重要性
- Qos报文分类和标记原理与实验
- 有没有好用的文字转语音软件?
- Html5 学习笔记 【PC固定布局】 实战6 咨询页面
- VC++游戏编程----游戏画面特效制作1
- 树莓派更改WiFi信息
- 销售订单退货原因对应的快码
- 为什么磁盘1次随机读需10ms
- 计算机内,二进制小数的表示方法
- 2018python教程百度云盘_『求老2018男孩Python最新全栈开发全套视频教程』python开发 百度云教程...
- 2021肥西实验高级中学高考成绩查询,高三年级召开2021年合肥市第二次教学质量检测成绩分析会...
热门文章
- android设置图片长宽比例,【教程】安卓保证图片长宽比的同时拉伸图片
- thinkpad linux win7,Thinkpad t440 Win7+ubuntu双系统
- win7和ubuntu18.04安装双系统详细教程
- 基金申请-1:基金委网站文件上传发生未知错误怎么办?
- 【C++】STL容器之string使用(赋值、拼接、查找、替换、比较、截取、插入、删除、子串)
- c语言中用temp程序,e__temp_c语言第02章作业.doc
- 云计算上安装mysql,redis
- 矩阵理论复习(十一)
- Vue过滤器:第二天
- 我怕有一天,也不相信爱情