jde*_*lop 10 serialization json jackson
在序列化为JSON时,我需要向对象添加新属性.属性的值是在运行时计算的,并且在对象中不存在.同样的对象也可以用于创建具有不同set ot字段的不同JSON(具有子类的基类,但我不想仅为JSON生成创建一个).
这样做的最佳方法是什么,这不涉及创建自定义序列化程序类,它将负责整个对象字段的序列化?或者可能继承一些"基本"序列化器,只需将其输出并以某种方式添加新字段?
我了解了mixins,看起来可以重命名/隐藏一些字段,但似乎无法添加额外的字段.
你能不能只在价值类中添加一个方法?请注意,它不必是公共的,也不必使用getter命名约定; 你可以这样做:
public class MyStuff {
// ... the usual fields, getters and/or setters
@JsonProperty("sum") // or whatever name you need in JSON
private int calculateSumForJSON() {
return 42; // calculate somehow
}
}
Run Code Online (Sandbox Code Playgroud)
否则,您可以将POJO转换为JSON树值:
JsonNode tree = mapper.valueToTree(value);
Run Code Online (Sandbox Code Playgroud)
然后通过添加属性等来修改它.
2021年呼唤...
我发现做到这一点的最简单方法是@JsonUnwrapped
:
public class Envelope<T> {
@JsonUnwrapped // content's fields are promoted alongside the envelope's
public T content;
// Transmission specific fields
public String url;
public long timestamp;
}
Run Code Online (Sandbox Code Playgroud)
只要Envelope's
字段名不与content
. 还有一个很好的功能,即在序列化 JSON 的末尾保留传输属性。
归档时间: |
|
查看次数: |
10859 次 |
最近记录: |