POJO 的条件命名 类
Conditional naming of POJO classes
我们的问题是,我们的服务 GET /services/v1/myobject
returns 对象名为 Xyz
。此表示被多个现有客户端使用。
新服务 GET /services/v2/myobject
需要公开完全相同但名称不同的对象,比如 XyzLmn
现在一个明显的解决方案是创建两个 classes Xyz
和 XyzLmn
,然后将 Xyz
复制到 XyzLmn
并公开 XyzLmn
在 v2
.
我正在寻找的是,如何保持相同的 java pojo class 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);
我们的问题是,我们的服务 GET /services/v1/myobject
returns 对象名为 Xyz
。此表示被多个现有客户端使用。
新服务 GET /services/v2/myobject
需要公开完全相同但名称不同的对象,比如 XyzLmn
现在一个明显的解决方案是创建两个 classes Xyz
和 XyzLmn
,然后将 Xyz
复制到 XyzLmn
并公开 XyzLmn
在 v2
.
我正在寻找的是,如何保持相同的 java pojo class 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);