当前位置: 首页 > news >正文

平台介绍-开放API接口-IO说明

IO遵循平台内部API规范,接口入参出参和内部用是完全一样的。

很多平台的SDK需要客户端自己封装和解析json,本平台不是这个思路,而是使用DTO来封装,因为很多接口本来就是对内对外一样的,例如根据id返回人员的接口:

服务端:

@PostMapping("/person/findPersonInfo")
@Operation(summary = "获取人员信息")
public ResponseResult<PersonInfoDto> findPersonInfo(@RequestBody RequestInfo requestInfo)

SDK对应函数:

package org.qlm.access.sdk.service;
public class CoreHRService {public static ResponseResult<PersonInfoDto> findPersonInfo(RequestInfo requestInfo)    throws Exception{...}
}

这也就是为什么平台强调要把dto层单独拿出来做单独工程,封装成独立jar的原因。这样dto可以共享到很多对方。

SDK和服务端通讯引用的是

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.6</version>
</dependency>

通讯返回的包结构如下:

public class SDKHttpResponse {public static int SUCCESS = 200;private int status;private String body;
}

最核心的技术是从SDKHttpResponse解析出真正需要的DTO结构

SDKHttpResponse中有静态方法:

public <T> ResponseResult<T> toResponseResult(RequestInfo req,Class<T> clazz){if (SUCCESS == this.getStatus()) {// 通讯成功Gson gson = new Gson();ResponseResult<T>result=new ResponseResult<T>();JsonObject resultObj = gson.fromJson(this.getBody(), JsonObject.class);result.setRetCode(resultObj.get("retCode").getAsInt());result.setMsg(resultObj.get("msg").getAsString());result.setFlag(resultObj.get("flag").getAsString());result.setVersion(resultObj.get("version").getAsString());result.setTimestamp(resultObj.get("timestamp").getAsString());result.setConsumer(resultObj.get("consumer").getAsString());result.setServer(resultObj.get("server").getAsString());result.setPath(resultObj.get("path").getAsString());result.setData(gson.fromJson(resultObj.get("data"),clazz));return result;} else {  // 通讯失败ResponseResult result=new ResponseResult();result.setRetCode(IOResultEnum.COMM_FAIL.getKey());result.setMsg("HTML Code:"+this.getStatus());result.setSerialNo(req.getSerialNo());return result;}
}

相关文章:

  • SpringAi接入DeepSeek大模型
  • FreeSwitch Windows安装
  • node.js为什么产生?
  • 双列集合——map集合和三种遍历方式
  • Java学习手册:SQL 优化技巧
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.1 日期时间标准化(时区转换/格式统一)
  • SpringMVC——第四章:三个域对象
  • MATLAB中tabulate函数——先验概率的简单估计
  • 【Redis】Java操作Redis之SpringDataRedis
  • 高并发?多线程?是一个东西吗?
  • LeetCode 热题 100 189. 轮转数组
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.3 异常值识别(Z-score法/IQR法/业务规则法)
  • PostgreSQL 的 ANALYZE 命令
  • R绘图|3分钟复现瑞士“苏黎世大学”Nature全球地图——基于R包ggplot2+sf等
  • 【Linux系统】条件变量
  • gitblit安装教程,搭建一个属于自己的Git版本仓库
  • 湖北理元理律师事务所:法律科技融合下的债务管理实践
  • Unity与Unreal Engine(UE)的深度解析及高级用法
  • 【网络】什么是串口链路(Serial Link)?
  • 文学与社会学是否只是在做解释的工作?
  • 晋城一男子实名举报村支书打伤其67岁父亲,镇政府:案件正在侦办中
  • 传奇落幕!波波维奇卸任马刺队主教练,转型全职球队总裁
  • 陈逸飞《黄河颂》人物造型与借鉴影像意义
  • 王受文已任中华全国工商业联合会领导班子成员
  • 五一去哪儿|外国朋友来中国,“买买买”成为跨境旅游新趋势
  • 金砖国家外长会晤落幕,外交部:发出了反对单边霸凌行径的“金砖声音”