批量位置上传报文解析示例
约 209 字小于 1 分钟
批量位置上传报文解析示例
警告
- 808文档中定义的位置上传报文有很多字段,但是 许多厂商实现的 808协议 位置上传报文 只是原始808的一个子集 。
- 本文举例用到的报文也 不是标准完整的位置上传报文,但是原理都一样。
- 此处以 2019 版的位置批量上传报文为例,展示如何基于注解来解析报文。
解析报文到实体类
实体类映射关系如下:
@Data
@Accessors(chain = true)
@BuiltinComponent
@Jt808RequestBody
public class LocationBatchUploadMsgV2019 {
// byte[0,2) WORD 数据项个数
// 从 2.1.1 开始可以不再指定 `startIndex` 属性
// 从 2.1.1 开始可以不再指定 `startIndex` 属性
// 从 2.1.1 开始可以不再指定 `startIndex` 属性
// @RequestField(order = 100, startIndex = 0, dataType = WORD)
@RequestField(order = 100, dataType = WORD)
// @RequestFieldAlias.Word(order = 100) // v2.1.1
private int count;
// byte[2] WORD 位置数据类型
@RequestField(order = 200, dataType = BYTE)
// @RequestFieldAlias.Byte(order = 200)
private int type;
@RequestField(order = 300, lengthExpression = "#ctx.msgBodyLength() - 3", dataType = LIST)
// @RequestFieldAlias.List(order = 300, lengthExpression = "#ctx.msgBodyLength() - 3")
private List<Msg0704Item> itemList;
@Data
@Accessors(chain = true)
public static class Msg0704Item {
// byte[0,2) WORD 位置汇报数据体长度
@RequestField(order = 100, dataType = WORD)
// @RequestFieldAlias.Word(order = 100)
private int msgLength;
// byte[2,n) WORD 位置汇报数据体
@RequestField(order = 200, lengthExpression = "msgLength", dataType = OBJECT)
// @RequestFieldAlias.Object(order = 200, lengthExpression = "msgLength")
private LocationUploadMsgV2019 locationInfo;
}
}
消息处理器如下:
@Slf4j
@Component
@Jt808RequestHandler
public class LocationMsgHandler {
@Jt808RequestHandlerMapping(msgType = 0x0704)
public BuiltinServerCommonReplyMsg processLocationBatchUploadMsgV2019(Jt808RequestEntity<LocationBatchUploadMsgV2019> request) {
log.info("LocationBatchUpload -- V2019 -- {}", request.body());
return BuiltinServerCommonReplyMsg.success(request.msgId(), request.flowId());
}
}
测试
测试报文如下
7E070400E401583860765500040003010049000000000004000301D9F190073CA3C1000C00000000211204082941010400D728AD3001003101092504000000001404000000041504000000001604000000001702000118030000000049000000000004000301D9F190073CA3C1000C00000000211130171352010400D728AD3001003101092504000000001404000000041504000000001604000000001702000118030000000049000000000004000301D9F190073CA3C1000C00000000211130171357010400D728AD300115310109250400000000140400000004150400000000160400000000170200011803000000407E
消息处理器截图如下: