子类的Jersey和Jackson序列化不包括额外的属性

|| 在Jersey中,当使用Jackson进行JSON序列化时,不包括实现子类的额外属性。例如,给定以下类结构
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property=\"@class\")
@JsonSubTypes({
    @JsonSubTypes.Type(value = Foo.class, name = \"foo\")
}
public abstract class FooBase {
    private String bar;

    public String getBar() {
        return bar;
    }

    public void setBar( String bar ) {
        this.bar = bar;
    }
}

public class Foo extends FooBase {
    private String biz;

    public String getBiz() {
        return biz;
    }

    public void setBiz( String biz ) {
        this.biz = biz;
    }
}
和以下泽西岛代码
@GET
public FooBase get() {
   return new Foo();
}
我回到下面的json
{\"@class\" => \"foo\", \"bar\" => null}
但是我真正想要的是
{\"@class\" => \"foo\", \"bar\" => null, \"biz\" => null}
另外,在我的web.xml中,我启用了POJOMappingFeature来解决此问题
<init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>
编辑:修复了Java代码,以正确设置设置程序,而Foo不是抽象的     
已邀请:
        它应该如您所展示的那样工作;有一个可能的例外:如果启用JAXB批注(仅),则JAXB限制要求仅使用getter / setter对来检测属性。 因此,请尝试为\'biz \'添加二传手,看看是否会改变它。 对于Jackson注释,这不会发生。最好不要同时使用Jackson和JAXB注释(我以为Jersey都启用了)。 如果还启用了Jackson注释处理,则在\'getBiz \'旁边添加@JsonProperty也可以解决问题。 最后,除非您需要JAXB批注,否则您可以只使用杰克逊批注-在我看来,JAXB批注的主要用例是如果您需要同时生成XML和JSON,并且对XML使用JAXB(通过Jersey)。否则,它们对JSON无效。     
        使用
POJOMappingFeature
,您还可以使用JAXB注释类:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class FooBase {
    private String bar;
}

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo extends FooBase {
    private String biz;
}
    

要回复问题请先登录注册