本文通过java代码实现设备的注册功能(使用的是SDK进行开发)包含了请求的封装,签名加密,响应解释,性能优化等
API文档在下载的SDK压缩包中
准备工作
- 需要导入平台提供的两个jar包
- 在选择服务和相应的开发语言后点击“SDK下载”按钮来下载SDK工具包。将下载的Java的SDK工具包进行解压
2. 将jar包导入maven仓库
新建一个springboot项目
1.1 新建springboot项目,导入需要的依赖
<!--平台的两个jar包-->
<dependency>
<groupId>com.ctg.ag</groupId>
<artifactId>ctg-ag-sdk-core</artifactId>
<version>2.5.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ctg.ag</groupId>
<artifactId>ag-sdk-biz-59497.tar.gz</artifactId>
<version>20210510.151332-SNAPSHOT</version>
</dependency>
<!--解析JSon格式数据-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
<!--lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
1.2 配置配置文件
在应用页面查看创建应用的app_key和app_secret
- 将app_key和app_secret放入配置文件中,以后若发送改动不需要修改代码,对配置文件进行修改即可
ctWing.APP_KEY= xxxxxxxxx
ctWing.APP_SECRET= xxxxxxxxx
1.3 根据API文档创建对应的dto类
API名称:CreateDevice
-
请求路径:/device
-
请求方法:POST
请求参数
名称 | 位置 | 类型 | 必填 | 描述 |
---|---|---|---|---|
MasterKey | HEAD | String | true | MasterKey在该设备所属产品的概况中可以查看 |
请求BODY
- 数据类型:json
内容描述:
{
"deviceName": "string",
"deviceSn": "string",
"imei": "string",
"operator": "string",
"other": {"autoObserver":0,
"imsi":"12545154878451",
"pskValue":"ADvNWlkcNq9AfKnk"},
"productId": 0
}
创建other类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Device {
/*
"other": {"autoObserver":0,
"imsi":"12545154878451",
"pskValue":"ADvNWlkcNq9AfKnk"},
*/
private Integer autoObserver; //0.自动订阅 1.取消自动订阅,必填
private String imsi; //选填
private String pskValue; //选填
}
创建设备的dto
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CreateDeviceDto {
/*
创建设备的dto
*/
private String deviceName; //设备名称,必填
private String deviceSn; //设备编号,MQTT,T_Link,TCP,HTTP,JT/T808,南向云协议必填
private String imei; //imei号,LWM2M,NB网关协议必填
private String operator; //操作者,必填
private Device device; //LWM2M协议必填参数
private Integer productId; //产品ID,必填
}
1.4 创建设备的工具类
步骤
- 根据appkey和appsecret创建一个客户端连接对象
- new一个创建设备请求对象
- 将请求参数放入到对应的请求方法中
- 将请求体转换为一个字节数组
- 将字节数组传递给请求
- 客户端调用创建设备方法并获得响应消息
- 关闭客户端连接
@Component
public class CtWingUtil {
//绑定配置文件中的参数,以后进行修改不用修改代码
private static String APP_KEY;
private static String APP_SECRET;
@Value("${ctWing.APP_KEY}")
public void setAppKey(String appkey) {
APP_KEY = appkey;
}
@Value("${ctWing.APP_SECRET}")
public void setAppSecret(String appSecret) {
APP_SECRET = appSecret;
}
//增加设备 后面的参数是API文档中的请求参数
public String createDevice(CreateDeviceDto dto,String masterKey){
//创建一个客户端连接
AepDeviceManagementClient client = AepDeviceManagementClient
.newClient()
.appKey(APP_KEY)
.appSecret(APP_SECRET).build();
CreateDeviceRequest request = new CreateDeviceRequest();
request.setParamMasterKey(masterKey);
//将对象转换为一个byte数组作为body传递
byte[] body = JSON.toJSONBytes(dto);
request.setBody(body);
CreateDeviceResponse response=null; //为了方便在try外使用该参数
//客户端调用方法
try {
response = client.CreateDevice(request);
} catch (Exception e) {
e.printStackTrace();
}
String string = new String(response.getBody());
client.shutdown(); //关闭连接返回响应结果
return string;
}
}
1.5 创建controller层
步骤
- 创建other对象
- 根据other对象构造创建设备dto对象
- 调用工具类,传递创建设备对象和masterKey参数
@RestController
public class MyController {
@Autowired
private CtWingUtil ctWingUtil;
@RequestMapping("/test")
public String createDevice(){
//other参数定义
Device device = new Device(0, "", "");
//公共参数定义
CreateDeviceDto deviceDto =
new CreateDeviceDto("测试4", "862177041088074", "862177041088074", "zhangsan", device, 15047914);
String response = ctWingUtil.createDevice(deviceDto, "279142920da340c38449b5ad79ba2817");
System.out.println(response);
return response;
}
}