2011-12-19 17 views
13

Jackson con Jersey supporta classi polimorfe su JSON?Polymorphism in JSON, Jersey e Jackson

Diciamo, ad esempio, che ho una classe Parent e una classe Child che ne eredita. E, diciamo che voglio usare JSON per inviare & ricevere sia padre che figlio su HTTP.

public class Parent { 
... 
} 

public class Child extends Parent { 
... 
} 

Ho pensato a questo tipo di implementazione:

@Consumes({ "application/json" }) // This method supposed to get a parent, enhance it and return it back 
    public @ResponseBody 
    Parent enhance(@RequestBody Parent parent) { 
    ... 
    } 

Domanda: Se io do questa funzione (attraverso JSON ovviamente) un oggetto figlio, funzionerà? Anche i campi dei membri extra del bambino saranno serializzati? Fondamentalmente, voglio sapere se questi framework supportano il consumo polimorfico & rispondono.

BTW, sto lavorando con Spring MVC.

risposta

11

Jackson fa il supporto del polimorfismo,

nel vostro bambino classe annotare con un nome:

@JsonTypeName("Child_Class") 
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "objectType") 
public class Child extends Parent{ 
.... 
} 

In genitore di specificare i tipi secondari:

@JsonSubTypes({ @JsonSubTypes.Type(value = Child.class), @JsonSubTypes.Type(value = SomeOther.class)}) 
public class Parent { 
    .... 
} 
+0

Grande risposta Usman. Tuttavia, probabilmente vuoi @JsonTypeInfo sul genitore invece che sui figli. –

+0

Potremmo farlo anche in questo caso, nel qual caso dovremmo inserire il nome nell'annotazione JsonSubTypes qualcosa come la risposta qui: http://stackoverflow.com/questions/11798394/polymorphism-in-jackson-annotations-jsontypeinfo- utilizzo –

+0

Funzionerà in Jersey 2 (ad esempio 2.9.1)? –

Problemi correlati