Rest POJO类的条件命名
我们的问题是,我们的服务Rest POJO类的条件命名,rest,serialization,pojo,annotated-pojos,Rest,Serialization,Pojo,Annotated Pojos,我们的问题是,我们的服务GET/services/v1/myobject返回名为Xyz的对象。此表示由多个现有客户端使用 新服务GET/services/v2/myobject需要公开完全相同但名称不同的对象,比如XyzLmn 现在一个明显的解决方案是创建两个类Xyz和XyzLmn,然后将Xyz复制到XyzLmn中,并在v2中公开XyzLmn 我在寻找的是,我如何保持相同的java pojo类Xyz,并有条件地将其序列化为XyzLmn或Xyz?您是否尝试在域对象上添加@JsonIgnorePro
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();
} }
我不是“GET/services/v1/myobject”的消费者,我是它的制作人。你试过使用Java泛型类型吗?例如@JsonIgnoreProperties(ignoreUnknown=true)@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)公共类MyEntity{private String version;private T versiondentity;}
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);