Jersey2 with Spring3:抽象类JSON序列化和缺少属性

时间:2015-04-21 20:46:17

标签: java json spring jackson jersey-2.0

我正在使用Jersey-spring3 v2.17

一切正常。从REST服务序列化的对象使用JSON格式正确公开。

仅抽象类中的对象未正确序列化。只有具体类的类型存在并在JSON对象中正确定义。

有关我的配置的一些信息: 应用程序配置类中的Jersey / Jackson配置:

register(JacksonFeature.class);

抽象类:

    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")  
    @JsonSubTypes({  
            @Type(value = Dog.class, name = "dog"), 
            @Type(value = Cat.class, name = "cat"), 
            @Type(value = Horse.class, name = "horse") })
    public abstract class Animal {
private String name;
private String description
    ...

输出目前采用此格式(不存在对象属性)

[{"type":"dog"},{"type":"cat"},{"type":"horse"}]

有什么想法解决我在JSON输出中缺少属性的问题吗?

1 个答案:

答案 0 :(得分:0)

我建议在要在抽象类中序列化的每个属性上添加@JsonProperty。另外,我建议在类上使用@JsonPropertyOrder来控制序列化字段的顺序。

带有属性顺序的警告是,无论您将哪些内容放入@JsonPropertyOrder,都会始终为JsonTypeInfo.As.PROPERTY列出type属性。如果您的子类实际上通过getter提供了类型,那么您可以使用JsonTypeInfo.As.EXISTING_PROPERTY,在这种情况下,如果我没记错的话,您甚至可以控制该属性的顺序。 jackson-databind-2.5.0已添加对JsonTypeInfo.As.EXISTING_PROPERTY功能的支持。