杰克逊多态@JsonTypeInfo类型属性始终为空

12

我在父类中有这个配置:

@JsonTypeInfo(
 use = JsonTypeInfo.Id.NAME,
 include = JsonTypeInfo.As.EXISTING_PROPERTY,
 property = "type",
 visible = true
)
@JsonSubTypes({
 @JsonSubTypes.Type(value = AnalysisViewer.class, name = "ANALYSIS"),
 @JsonSubTypes.Type(value = CombinedAnalysisViewer.class, name = "COMBINED"),
 @JsonSubTypes.Type(value = SingleSourceViewer.class, name = "SINGLESOURCE"),
 @JsonSubTypes.Type(value = SingleSourceGroupViewer.class, name = "SINGLESOURCE_GROUP")
})

这个类有一个type属性,我需要将其保存到数据库中(使用JPA)。

public class Viewer {
  ...
  @Column(name = "TP_VIEWER")
  @Enumerated(EnumType.STRING)
  private ViewerTypeEnum type;
  ...
}

使用此配置或更改为 visible=falseinclude=JsonTypeInfo.As.PROPERTY,我会在序列化时出现错误,提示无法写入相同的属性两次,或者出现错误,提示无法保存空值到type列中。

我需要将类型属性保存到数据库中,并使用它来向Jackson传递子类型信息。我尝试了很多不同的配置,但找不到关于保留和填充属性的反序列化文档。请问有人能帮我吗?

先感谢您的帮助。

1个回答

25

@JsonTypeInfo中添加参数visible,并将其设置为true。默认值为false

@JsonTypeInfo(..., visible = true)

根据JsonTypeInfo的文档:

该属性定义类型标识符值是否作为JSON流的一部分传递给反序列化器(true),或由TypeDeserializer处理并删除(false)。该属性对序列化没有影响。

默认值为false,表示Jackson处理并从传递给JsonDeserializer的JSON内容中删除类型标识符。


无法工作 - Saad Benbouzid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接