我在父类上有这个配置:
@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=false
和include=JsonTypeInfo.As.PROPERTY
我在序列化时遇到错误,说它无法写入两次相同的属性,或者出错说我无法在type
列中保存空值。
我需要的是在数据库中使用type属性并使用它来教杰克逊的子类型。我尝试了很多不同的配置,但我找不到关于在反序列化时保留和填充属性的文档。有人可以帮我吗?
提前致谢。
答案 0 :(得分:9)
将参数visible
添加到@JsonTypeInfo
并将其设为true
。默认情况下为false
:
@JsonTypeInfo(..., visible = true)
来自JsonTypeInfo文档:
定义类型标识符值是否将作为JSON流的一部分传递给反序列化器(true),或由TypeDeserializer(false)处理和删除的属性。属性对序列化没有影响。
默认值为false,表示Jackson处理并从传递给JsonDeserializer的JSON内容中删除类型标识符。