2017-02-25 1 views
0

Notre problème est que notre service GET /services/v1/myobject renvoie un objet nommé Xyz. Cette représentation est utilisée par plusieurs clients existants.Désignation conditionnelle des classes POJO

Le nouveau service GET /services/v2/myobject doit exposer un même objet exact mais avec un nom différent, disent XyzLmn

maintenant une solution évidente serait de créer deux classes Xyz et XyzLmn, puis copiez Xyz dans XyzLmn et d'exposer XyzLmn dans le v2 . Ce que je cherche est, comment puis-je garder la même classe java pojo Xyz et conditionnellement sérialiser à XyzLmn ou Xyz?

Répondre

0

Une solution est:

  1. Ecrire un sérialiseur client qui émet XyzLmn
  2. Enregistrez le sérialiseur client conditionnellement

    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

avez-vous essayé d'ajouter le @JsonIgnoreProperties (ignoreUnknown = true) sur votre objet de domaine?

+0

Je ne suis pas le consommateur de 'GET/services/v1/myobject' Je suis le producteur de celui-ci. –

+0

avez-vous essayé d'utiliser le type Java Generic? tel que @JsonIgnoreProperties (ignoreUnknown = true) @JsonSerialize (include = JsonSerialize.Inclusion.NON_NULL) public class MyEntity { \t private String version; \t private T VersionedEntity; } –