首页 > 解决方案 > 像 POJO 一样序列化 Java Set-like 对象

问题描述

我有一个实现java.util.Set. 然而,对于 JSON 序列化,我想将此类的实例表示为 JSON 对象,其中集合的元素由自定义String 编码表示,这就是该类具有合成属性的原因elements(即,没有真正的属性,值为总是即时计算)。

public class MySet implements Set<...> {
   public String getElements() {
       // Return String encoding of the set's elements.
   }
   public void setElements(String encoding) {
       // Parse encoding and set elements of the set accordingly.
   }
   // A few more properties also accessible by getters/setters. 
}

该类还有一些属性,getter/setter 也可以访问。它们也应该是 JSON 序列化的。总而言之,所有属性都应该序列化为 JSON 对象的键/值对。

预期的 JSON 序列化:

{
   "elements": "...encoding...",
   // other properties as key/value pairs
}

在这方面,类可以看作是一个POJO。事实上,这是我假设杰克逊要考虑的;即,杰克逊会忽略该类也是Set. 然而,Jackson 似乎更喜欢这个类一个 Set 并将其序列化;即,数组 JSON 结构。

是否可以仅使用注释来实现这种反序列化,@Json...而无需实现自定义反序列化器?

标签: javajackson

解决方案


这可以使用@JsonFormat注释来实现,基本上覆盖了 Jackson 序列化 a 的默认行为Set

@JsonFormat(shape = OBJECT)
public class MySet implements Set<...> {
   // ...
}

这已成功测试,导致问题中描述的预期 JSON 对象结构。


推荐阅读