我们的问题是,我们的服务GET /services/v1/myobject
返回名为Xyz
的对象。此表示由多个现有客户端使用。
新服务GET /services/v2/myobject
需要公开完全相同但具有不同名称的对象,例如XyzLmn
现在一个明显的解决方案是创建两个类Xyz
和XyzLmn
,然后将Xyz
复制到XyzLmn
并在{{1}中公开XyzLmn
}}
我正在寻找的是,如何保持相同的java pojo类v2
并有条件地将其序列化为Xyz
或XyzLmn
?
答案 0 :(得分:0)
您是否尝试在域对象上添加@JsonIgnoreProperties(ignoreUnknown = true)?
答案 1 :(得分:0)
一个解决方案是:
XyzLmn
有条件地注册客户序列化程序
public class XyzWrapperSerializer extends StdSerializer<Item> {
public ItemSerializer() {
this(null);
}
public ItemSerializer(Class<Item> t) {
super(t);
}
@Override
public void serialize(
Item value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeNumberField("XyzLmn", value.id);
jgen.writeEndObject();
} }
XyzWrapper myItem = new XyzWrapper(1, "theItem", new User(2, "theUser")); ObjectMapper mapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addSerializer(XyzWrapper.class, new XyzWrapperSerializer()); mapper.registerModule(module); String serialized = mapper.writeValueAsString(myItem);