跳至主要內容

批量位置上传报文解析示例

hylexus约 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

消息处理器截图如下: