1

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 には実際には 2 つのdocumentTypeフィールドがあるためです。

エラーなしでフィールドにJsonTypeName値が表示されるようにするには、何を変更する必要がありますか (他の値を置き換えるなど)?documentType

ジャクソンのバージョンは 2.2

4

1 に答える 1

2

コードには表示されませんが、DocumentクラスにdocumentTypeプロパティのゲッターがあるに違いありません。このゲッターに@JsonIgnore次のように注釈を付ける必要があります。

@JsonIgnore
public String getDocumentType() {
    return documentType;
}

各サブクラスには暗黙的なdocumentTypeプロパティが関連付けられているため、親クラスに同じプロパティがあると、2 回シリアル化されます。

もう 1 つのオプションは、ゲッターを完全に削除することですが、一部のビジネス ロジックでゲッターが必要になる可能性があるため、@JsonIgnore注釈が最適なオプションである可能性があります。

于 2013-07-29T19:19:54.730 に答える