【问题标题】:Jackson Polymorfic @JsonTypeInfo type attribute always nullJackson Polymorfic @JsonTypeInfo 类型属性始终为空
【发布时间】:2015-12-21 05:45:14
【问题描述】:

我在父类上有这个配置:

@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 属性并用它来教 Jackson 子类型。我尝试了很多不同的配置,但我找不到关于在反序列化时保留和填充属性的文档。有人可以帮我吗?

提前致谢。

【问题讨论】:

    标签: java json hibernate jackson


    【解决方案1】:

    将参数visible 添加到@JsonTypeInfo 并使其成为true。默认是false:

    @JsonTypeInfo(..., visible = true)
    

    来自JsonTypeInfo 文档:

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

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

    【讨论】:

      猜你喜欢
      • 2016-02-10
      • 2021-05-03
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多