【问题标题】:Jersey2 with Spring3: Abstract class JSON serialization and missing propertiesJersey2 和 Spring3:抽象类 JSON 序列化和缺少的属性
【发布时间】:2015-04-21 20:46:16
【问题描述】:

我正在使用 Jersey-spring3 v2.17

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

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

关于我的配置的一些信息: Application 配置类中的 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 输出中缺少属性的问题吗?

【问题讨论】:

  • 您在我们的抽象类中声明了公共 getter 吗?

标签: java json spring jackson jersey-2.0


【解决方案1】:

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

关于属性顺序的一个警告是,无论您在@JsonPropertyOrder 中输入了什么,对于 JsonTypeInfo.As.PROPERTY,type 属性将始终列在最前面。如果您的子类实际上通过 getter 提供类型,那么您可以使用 JsonTypeInfo.As.EXISTING_PROPERTY 在这种情况下,如果我没记错的话,您甚至可以控制该属性的顺序。 jackson-databind-2.5.0 添加了对JsonTypeInfo.As.EXISTING_PROPERTY 功能的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2021-12-13
    • 2015-08-23
    • 1970-01-01
    • 2021-06-11
    • 2012-08-13
    • 1970-01-01
    相关资源
    最近更新 更多