Jackson
cosid-jackson(包 me.ahoo.cosid.jackson)为 Jackson 3(tools.jackson)提供 @AsString:long ID 以文本写出,并从文本读回, 供无法容纳 63 位数字的 JavaScript 客户端使用。
java
@AsString long id; // radix 62, 11 digits, padded (as in 4.x)
@AsString(generator = "order") long orderId; // the codec of generator "order"
@AsString(codec = Codec.TO_STRING) long a; // decimal text
@AsString(radix = 36, width = 13, padStart = false) long b;
@AsString(codec = Codec.FRIENDLY, layout = Preset.SNOWFLAKE_S, zone = "Asia/Shanghai") long c;
@AsString(codec = Codec.FRIENDLY, timeBits = 41, nodeBits = 5, seqBits = 17, epoch = 1700000000000L) long d;generator = …与内联属性互斥。- 内联编解码器不需要注册 module。
generator = …需要在JsonMapper上注册new CosIdJacksonModule(runtime); Spring Boot 会注册一个CosIdJacksonModuleBean。 - 读取时接受文本、该编解码器可能写出的 JSON 数字,空字符串视为
null。 - 只支持 Jackson 3:不支持 Jackson 2(
com.fasterxml.jackson.databind)。
从 4.x 迁移
@AsString 的属性已改名:
| 4.x | 5.0 |
|---|---|
value(AsString.Type) | codec(AsString.Codec) |
Type.TO_STRING、Type.RADIX | Codec.TO_STRING、Codec.RADIX |
Type.FRIENDLY_ID | Codec.FRIENDLY |
radixCharSize | width(默认 0,即该进制下 long 所需的位数) |
radixPadStart | padStart |
timestampBit、machineBit、sequenceBit | timeBits、nodeBits、seqBits(三者都设或都不设) |
epoch | epoch(不设时取 layout 的 epoch) |
| — | generator、radix(默认 62)、layout、zone |
friendly 文本的默认值变了:4.x 的 FRIENDLY_ID 不给节点号和序列补零(…-1-5),5.0 的 Codec.FRIENDLY 补零(…-0001-0005)。 要保持 4.x 的文本,请写 padStart = false。两种形式都能解析。
