我们的问题是,我们的服务GET /services/v1/myobject
返回名为Xyz
的对象。此表示由多个现有客户使用。
新服务GET /services/v2/myobject
需要公开完全相同的对象,但使用不同的名称,例如XyzLmn
现在,一个明显的解决方案是创建两个类Xyz
和XyzLmn
,然后将Xyz
复制到XyzLmn
中,然后在v2
中公开XyzLmn
。
我正在寻找的是,如何保留相同的Java Pojo类Xyz
并将其序列化至XyzLmn
或Xyz
?
您是否尝试在您的域对象上添加@jsonignoreproperties(ignoreunknown = true)?
一个解决方案是:
- 编写发射
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);