2017-02-25 31 views
0

我们的问题是,我们的服务GET /services/v1/myobject返回名为Xyz的对象。这种表示形式被多个现有客户端使用。POJO类的条件命名

新的服务GET /services/v2/myobject需要公开完全相同的对象,但不同的名字,说XyzLmn

现在一个明显的解决方案是创建两个类XyzXyzLmn,然后Xyz复制到XyzLmn并在v2暴露XyzLmn

我在找什么,我怎么能保持相同的Java pojo类Xyz并有条件地序列化到XyzLmnXyz

回答

0

一种解决方案是:

  1. 写的客户串行发出XyzLmn
  2. 注册客户串行有条件

    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); 
    
0

您是否尝试在您的域对象上添加@JsonIgnoreProperties(ignoreUnknown = true)?

+0

我不是'GET/services/v1/myobject'的使用者,我是它的制作者。 –

+0

你尝试使用Java通用类型吗?例如@JsonIgnoreProperties(ignoreUnknown = true) @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class MyEntity { \t private String version; \t private T VersionedEntity; } –