杰克逊序列化器:基于不同字段的自定义序列化器

时间:2018-07-12 21:05:53

标签: java serialization jackson

我有一个要序列化的列表字段。 我也想序列化当类被序列化时到目前为止我看到的最大值。

class A {
private List<int> list;
private int max; //Math.Max(max, Collections.max(list));}

我认为我需要使用@JsonSerialize批注,但是我在此处指定的自定义序列化程序将采用列表或最大值,而不是全部采用。 可以为使用列表字段中数据的最大字段添加序列化程序吗?

1 个答案:

答案 0 :(得分:0)

该列表在您的班级中是private,因此您可以完全控制如何向其中添加元素。也就是说,如果您的类中没有执行该操作的代码,则什么也不会添加到列表中。

因此,无论代码添加(或删除,如果这样做)元素,都应仅更新max值作为其操作的一部分。然后在进行序列化时,使用列表和max上的标准序列化器。

如果出于某种原因(例如,由于使用某种方法返回列表的引用)而公开了列表,则应子类List<whatever>并重写add()方法以跟踪最大值