Spring-Jackson-Dynamic-Field
最近在处理一个 JSON 接口时,遇到这样一种情况:返回的数据中包含一些我事先并不知道的字段,这些字段会根据上下文动态变化,没办法在 Java 类中提前写死字段名。
起初我以为只能通过 Map 手动解析,但后来发现 Jackson 提供了 @JsonAnyGetter 和 @JsonAnySetter 这两个注解,专门用来处理这种“动态属性”。它们能让我优雅地把未知字段收集起来或者序列化出去,不影响已知字段的正常处理。
不过我在使用过程中也有点疑惑,比如这两个注解的用法顺序有什么讲究?有哪些坑需要避免?这种方式是不是适合所有动态字段的场景?
开家杂货铺吧
@JsonAnyGetter/@JsonAnySetter: 像开了一家灵活应对一切需求的「杂货铺」
想象你是个 JSON 杂货铺老板,门口写着招牌:“你有啥,我都能装;你要啥,我都能配。”
你平时会备一些常规商品(字段),但总有顾客带些奇怪需求来问:
- 老板,有没有草莓味的牙膏?
- 能不能加点冰块到辣酱里?
这些你事先没在货架上准备的“临时需求”,你也得接单,对吧?
这时候你就需要一对“万能架子”——也就是: