我有一个简单的数据对象层次结构,必须转换为JSON格式。像这样:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "documentType")
@JsonSubTypes({@Type(TranscriptionDocument.class), @Type(ArchiveDocument.class)})
public class Document{
private String documentType;
//other fields, getters/setters
}
@JsonTypeName("ARCHIVE")
public class ArchiveDocument extends Document { ... }
@JsonTypeName("TRANSCRIPTIONS")
public class TranscriptionDocument extends Document { ... }
在JSON解析时,我遇到类似这样的错误:
Unexpected duplicate key:documentType at position 339.
,因为在生成的JSON中实际上有两个documentType
字段。
如果JsonTypeName
字段中显示documentType
值,应该更改哪些内容没有错误(例如替换其他值)?
杰克逊版本为2.2
答案 0 :(得分:2)
您的代码没有显示,但我打赌您的Document
类中有documentType
属性的getter。您应该使用@JsonIgnore
注释此getter,如下所示:
@JsonIgnore
public String getDocumentType() {
return documentType;
}
有一个与每个子类关联的隐式documentType
属性,因此在父类中具有相同的属性会导致它被序列化两次。
另一种选择是完全删除getter,但我认为你可能需要它用于某些业务逻辑,因此@JsonIgnore
注释可能是最好的选择。