@jsonproperty在同一属性名中序列化不同的pojo元素

时间:2016-11-17 15:12:41

标签: java json jackson

我有一个简单的pojo

public class C {
   public String f1;
   public Integer f2;
}

在运行时,我确信最多其中一个字段不为空(即如果f1"hello",我确定f2null,反之亦然)

我想使用始终相同的名称序列化对象;例如,

C c1 = new C();
c1.f1 = "hello"
C c2 = new C();
c2.f2 = Integer.valueOf(99)

我希望将c1序列化为{"samekey":"hello"},将c2序列化为{"samekey":99}

我知道我可以使用@JsonProperty来设置序列化名称,但我不能为这两个字段设置相同的名称。

有没有办法说出来?

1 个答案:

答案 0 :(得分:0)

这是CustomSerializer,检查f2值是否为null,然后将f2值复制到f1并使f2 = null。并且排除模型中的空值,因此总是会得到一个键和值,因为其他值将为null。 / p>

public class CustomSerializer extends JsonSerializer<C> {

@Override
public void serialize(final C c, final JsonGenerator gen, final SerializerProvider serializers) throws IOException, JsonProcessingException {
    if(c.getF2() != null)  // considering always you need f1 key && value
    {
        c.setF1(c.getF2().toString());
        c.setF2(null);
    }
}

}

注释序列化器&amp;在模型中没有空白

@JsonSerialize(using = CustomSerializer.class)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class C {
   private String f1;
   private Integer f2;

   //getters & setters
}

希望这是你所期待的。