Swagger定義からクラスを生成しました。 1つのフィールドが共通のop
の4つの異なるクラスがあります(クラス階層はなく、各クラスにフィールドが複製されています)。JSONデータのストリームをオブジェクトに読み込むために生成されたクラスとJacksonを操作する
op
フィールドの値に応じて、JSONデータのストリームを4つの異なるクラスのいずれかに逆シリアル化する必要があります。例えば
:
{"op": "typeA", ...} -> generates TypeA
{"op": "typeB", ...} -> generates TypeB
が、私はこのためにジャクソンを使用したいです。私が見つけたすべての例では、問題を解決するためにクラス階層を作ることができるように元のクラスを修正できると仮定しているという問題があります。しかし、私の質問は、どのように私は元のクラスを変更することなくこれを解決することができますか?
元の例は、階層を想定し、このように行われる:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "op",
visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value = ConnectionMessage.class, name = "connection"),
@JsonSubTypes.Type(value = StatusMessage.class, name = "status"),
@JsonSubTypes.Type(value = MarketChangeMessage.class, name = "mcm"),
@JsonSubTypes.Type(value = OrderChangeMessage.class, name = "ocm"),
})
public interface MixInResponseMessage {
}
これは階層を前提としているので、完全に答えはありませんが、ミックスインを使って考えても構いません。ここでは、ミックスインを使用して親の抽象クラスをターゲットにする例を示します。 https://github.com/Flaw101/springbootmixin –