转换示例:
{“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));
// }

}

第三方接口转换工具类相关推荐

  1. android 单位转换工具,Android单位转换工具类

    Android单位转换工具类 Android单位转换工具类主要由以下4部分构成 1.这个类不能被初始化 2.dip转px接口 3.sp转px接口 4.px转dip接口 代码如下: import and ...

  2. android 字体像素转换工具类_Android中px与dip,sp与dip等的转换工具类

    Android中px与dip,sp与dip等的转换工具类 功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方 ...

  3. java gson 工具类_GSON 实体 转换工具类

    /** * Gson转换工具类 */ public class GsonUtils { /** * @param jsonString *            json字符串 * @param cl ...

  4. android 日期时间类,Android 日期时间等转换工具类

    package com.easyder.util; import java.text.SimpleDateFormat; import java.util.Date; /** * 日期时间等转换工具类 ...

  5. android 字体像素转换工具类_android px,dp,sp大小转换工具

    package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类 * * float s ...

  6. java 视频转码工具类_JavaCV入门指南:FrameConverter转换工具类及CanvasFrame图像预览工具类(javaCV教程完结篇)...

    JavaCV入门指南:FrameConverter转换工具类及CanvasFrame图像预览工具类(javaCV教程完结篇) 前言 再此章之前,我们已经详细介绍和剖析了javacv的结构和ffmpeg ...

  7. java字体颜色编程_Java 字体颜色转换工具类 ColorUtil

    Java 字体颜色转换工具类 ColorUtil,Java 字体颜色转换工具类 ColorUtil-- import java.awt.Color; import jxl.format.Colour; ...

  8. Java 字体颜色转换工具类 ColorUtil

    import java.awt.Color;  import jxl.format.Colour;       /**  *字体颜色转换工具类  * @author tanghui  *  */ pu ...

  9. 自定义java对象转换工具类

    背景 项目中经常有VO.PO.DTO等之间转换,由于apache工具类中BeanUtils.copyProperties及Json序列化反序列化方式转换性能比较低(阿里巴巴规范检查有提示不建议采用). ...

最新文章

  1. matlab 二分法求方程近似解
  2. redis stream java消息队列_Redis-消息队列的两种实现方式
  3. “策小编数洞”开工啦,欢迎来唠两块钱儿的
  4. Auto.js Pro如何连接VS Code插件
  5. oracle数据库SQL入门
  6. python 元组 列表 字典区别_python编程:常用的数据结构之字典的方法总结,和列表和元组区别...
  7. [C++] Value Categories
  8. 【.net core 跨平台】第一步 在Ubuntu16.04 配置.net core环境
  9. elcipse开发android locat一会显示一会消失的问题
  10. 工作流程管理的重要性
  11. Qos报文分类和标记原理与实验
  12. 有没有好用的文字转语音软件?
  13. Html5 学习笔记 【PC固定布局】 实战6 咨询页面
  14. VC++游戏编程----游戏画面特效制作1
  15. 树莓派更改WiFi信息
  16. 销售订单退货原因对应的快码
  17. 为什么磁盘1次随机读需10ms
  18. 计算机内,二进制小数的表示方法
  19. 2018python教程百度云盘_『求老2018男孩Python最新全栈开发全套视频教程』python开发 百度云教程...
  20. 2021肥西实验高级中学高考成绩查询,高三年级召开2021年合肥市第二次教学质量检测成绩分析会...

热门文章

  1. android设置图片长宽比例,【教程】安卓保证图片长宽比的同时拉伸图片
  2. thinkpad linux win7,Thinkpad t440 Win7+ubuntu双系统
  3. win7和ubuntu18.04安装双系统详细教程
  4. 基金申请-1:基金委网站文件上传发生未知错误怎么办?
  5. 【C++】STL容器之string使用(赋值、拼接、查找、替换、比较、截取、插入、删除、子串)
  6. c语言中用temp程序,e__temp_c语言第02章作业.doc
  7. 云计算上安装mysql,redis
  8. 矩阵理论复习(十一)
  9. Vue过滤器:第二天
  10. 我怕有一天,也不相信爱情