2017-02-25 33 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; } –