2011-12-19 18 views
13

Czy Jackson z Jersey obsługuje klasy polimorficzne nad JSON?Polimorfizm w JSON, Jersey i Jackson

Załóżmy na przykład, że mam klasę nadrzędną i klasę potomną, która dziedziczy po niej. Powiedzmy, że chcę użyć JSON, aby wysłać & otrzymywać zarówno nadrzędne, jak i podrzędne przez HTTP.

public class Parent { 
... 
} 

public class Child extends Parent { 
... 
} 

myślałem o tego rodzaju realizacji:

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

pytanie: Jeśli daję tę funkcję (za pomocą JSON oczywiście) obiektu dziecka, to będzie działać? Czy dodatkowe pola dla dzieci będą również serializowane? Zasadniczo chcę wiedzieć, czy te frameworki obsługują odpowiedź polimorficzna &.

BTW, pracuję z Spring MVC.

Odpowiedz

11

Jackson robi polimorfizm wsparcie,

u dziecka klasy annotate z nazwa:

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

W rodzica określić podtypy:

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

Świetna odpowiedź Usman. Jednak prawdopodobnie chcesz @JsonTypeInfo na rodzica zamiast na dzieci. –

+0

Moglibyśmy zrobić to w ten sposób, w takim przypadku musielibyśmy umieścić w adnotacji JsonSubTypes coś jak odpowiedź tutaj: http://stackoverflow.com/questions/11798394/polymorphism-in-jackson-annotations-jsontypeinfo- użycie –

+0

Czy to działa w Jersey 2 (np. 2.9.1)? –