提示
- 在阅读本文之前,建议先阅读 协议格式说明
- 所谓的 扁平化写法 就是不用单独封装
Header
和Body
,而是直接将Header
和Body
的数据写在同一个实体类中
大约 1 分钟
提示
Header
和 Body
,而是直接将 Header
和 Body
的数据写在同一个实体类中提示
Header
和 Body
分别封装到单独的实体类中。todo 后面补齐: ...
todo 后面补齐: ...
内置注解都是从 @XtreamField
注解扩展而来的。目前有两种风格的注解:
Rust
数据类型命名风格JT/T 808
协议数据类型命名风格提示
Rust
风格内置注解
JT/T 808
风格的注解只支持无符号,因为 JT/T 808
官方文档里都是无符号数@XtreamField
注解
@XtreamField
来进行扩展自定义注解都是通过元注解 @XtreamField
的来实现的。
本示例将演示通过 @XtreamField
来实现一个自定义的日期注解。
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@XtreamField(fieldCodec = MyDateTypeFieldCodec.class, dataType = BeanPropertyMetadata.FiledDataType.basic)
public @interface MyDateType {
@AliasFor(annotation = XtreamField.class, attribute = "order")
int order() default -1;
@AliasFor(annotation = XtreamField.class, attribute = "condition")
String condition() default "";
}
长度 | 符号位 | JavaType | Rust风格注解 | JT风格注解 |
---|---|---|---|---|
1 | 无 | byte/Byte |
@Preset.RustStyle.u8 |
@Preset.JtStyle.Byte |
1 | 有 | short/Short |
@Preset.RustStyle.i8 |
-- |
2 | 无 | short/Short |
@Preset.RustStyle.u16 |
@Preset.JtStyle.WORD |
2 | 有 | int/Integer |
@Preset.RustStyle.i16 |
-- |
4 | 无 | int/Integer |
@Preset.RustStyle.u32 |
@Preset.JtStyle.DWORD |
4 | 有 | long/Long |
@Preset.RustStyle.i32 |
-- |
8 | 无 | long/Long |
@Preset.RustStyle.u64 |
-- |
@XtreamField
是最基础的注解。
内置的 别名(Alias) 注解 @Preset.RustStyle.xxx
和 @Preset.JtStyle.xxx
都是基于 @XtreamField
这个基础注解 衍生 的。
提示
注解别名都是依赖于 Spring
的 @org.springframework.core.annotation.AliasFor
注解实现的。