Jackson Polymorfic @JsonTypeInfo类型属性始终为null

时间:2015-09-23 19:02:49

标签: java json hibernate jackson

我在父类上有这个配置:

@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列中保存空值。

我需要的是在数据库中使用type属性并使用它来教杰克逊的子类型。我尝试了很多不同的配置,但我找不到关于在反序列化时保留和填充属性的文档。有人可以帮我吗?

提前致谢。

1 个答案:

答案 0 :(得分:9)

将参数visible添加到@JsonTypeInfo并将其设为true。默认情况下为false

@JsonTypeInfo(..., visible = true)

来自JsonTypeInfo文档:

  

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

     

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