跳至主要內容

响应消息映射

hylexus约 455 字大约 2 分钟

响应消息映射

@Jt808ResponseBody

该注解的作用类似于 WebFlux/WebMvc 中的 @ResponseBody

表明被该注解标记的类可以作为 响应体

属性

属性说明默认值示例
msgId消息类型--{0x8103}{0x8001}
maxPackageSize单个数据包的最大大小(转义之前)10241024 2048
desc描述信息"""Some description ..."
reversedBit15InHeader消息体属性中保留的第15个 bit0

示例

@Jt808ResponseBody(msgId = 0x8103, desc = "设置终端参数")
public class RespTerminalSettings {
    @ResponseField(order = 2, dataType = MsgDataType.LIST)
    private List<ParamItem> paramList;
    // ...
}
 





@ResponseField

属性

属性说明默认值示例
order赋值顺序,值越小优先级越高(不要求连续,只比较大小)--012
dataType数据类型--WORDBYTE
conditionalOn支持 SpEL , 当且仅当计算结果为 true 时才会序列化"""#this.result == 0"
customerFieldSerializerClass自定义反序列化器--"XxxSerializer.class"

SpEL

属性说明
this正在迭代的当前对象永不为空
request本次请求对应的 Jt808Request 实例主动下发消息时为空(因为此时没有 Request 的概念)
header本次请求对应的 Jt808Request#header() 实例主动下发消息时为空(因为此时没有 Request 的概念)
sessionJt808Session 实例手动编码消息时可能为空

提示

SpEL 绑定的 RootObject 就是当前正在迭代的对象。

所以 #this.someField 等价于 someField#this.someMethod() 等价于 someMethod() (#this 可以省略)。

示例

@Data
@Accessors(chain = true)
@Jt808ResponseBody(msgId = 0x8100)
public class TerminalRegisterReplyRespMsg {

    // 1. byte[0,2) WORD 对应的终端注册消息的流水号
    @ResponseField(order = 0, dataType = MsgDataType.WORD)
    private int flowId;
    
    // 2. byte[2,3) BYTE 0:成功;1:车辆已被注册;2:数据库中无该车辆; 3:终端已被注册;4:数据库中无该终端
    @ResponseField(order = 1, dataType = MsgDataType.BYTE)
    private byte result;
    
    // 3. byte[3,x) STRING 鉴权码(只有在成功后才有该字段)
    @ResponseField(order = 3, dataType = MsgDataType.STRING, conditionalOn = "result == 0")
    private String authCode;
}