我正在使用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输出中缺少属性的问题吗?
答案 0 :(得分:0)
我建议在要在抽象类中序列化的每个属性上添加@JsonProperty
。另外,我建议在类上使用@JsonPropertyOrder
来控制序列化字段的顺序。
带有属性顺序的警告是,无论您将哪些内容放入@JsonPropertyOrder
,都会始终为JsonTypeInfo.As.PROPERTY列出type属性。如果您的子类实际上通过getter提供了类型,那么您可以使用JsonTypeInfo.As.EXISTING_PROPERTY
,在这种情况下,如果我没记错的话,您甚至可以控制该属性的顺序。 jackson-databind-2.5.0已添加对JsonTypeInfo.As.EXISTING_PROPERTY
功能的支持。