我有一个简单的pojo
public class C {
public String f1;
public Integer f2;
}
在运行时,我确信最多其中一个字段不为空(即如果f1
为"hello"
,我确定f2
为null
,反之亦然)
我想使用始终相同的名称序列化对象;例如,
C c1 = new C();
c1.f1 = "hello"
C c2 = new C();
c2.f2 = Integer.valueOf(99)
我希望将c1
序列化为{"samekey":"hello"}
,将c2
序列化为{"samekey":99}
。
我知道我可以使用@JsonProperty
来设置序列化名称,但我不能为这两个字段设置相同的名称。
有没有办法说出来?
答案 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
}
希望这是你所期待的。