2011-12-19 59 views
13

杰克逊与Jersey支持JSON的多态类吗?JSON,泽西岛和杰克逊的多态性

比方说,我有一个Parent类和一个继承自它的Child类。而且,假设我想使用JSON发送&通过HTTP接收Parent和Child。

public class Parent { 
... 
} 

public class Child extends Parent { 
... 
} 

我已经想过这种实现的:

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

问题:如果我把这个功能(通过课程的JSON)的子对象,它是否行得通呢?孩子的额外成员字段是否会被序列化?基本上我想知道这些框架是否支持多态消耗&作出回应。

顺便说一句,我正在使用Spring MVC。

回答

11

杰克逊不支持多态,

在你的子类注释与一个名字:

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

在父母指定的子类型:

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

大答案乌斯曼。但是,您可能需要父级上的@JsonTypeInfo而不是子级上的。 – 2012-11-14 02:44:54

+0

我们也可以这样做,在这种情况下,我们必须将名称放入JsonSubTypes注释中,类似于以下答案:http://stackoverflow.com/questions/11798394/polymorphism-in-jackson-annotations-jsontypeinfo-用法 – 2012-11-14 04:50:07

+0

它会在泽西岛2运作吗(例如2.9.1)? – 2014-10-08 11:35:16