2017-08-03 10 views
0

私のシステムが読み込んでいるいくつかのJSONオブジェクトでJsonTypeInfoを使用して多態性を処理しています。システムはこれらのオブジェクトを他のサービスに提供します。場合によっては、タイプ情報などの詳細なオブジェクトが必要な場合があります。また、オブジェクトの最小限のビューをベアボーンで作成したい場合もあります。Jackson JsonViewとJSonTypeInfo

これを処理するためにJsonViewsをセットアップしようとしていますが、私が何をしていても、シリアル化されたJSONの型情報が含まれています。私はいくつかの異なる方法を試しましたが、以下は私がしようとしていることの例です。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") 
@JsonSubTypes({ 
     @JsonSubTypes.Type(value = PlayerSpawnedEvent.class, name = "PlayerSpawnedEvent"), 
     @JsonSubTypes.Type(value = PlayerStateChangedEvent.class, name = "EntityStateChangeEvent") 
}) 

public abstract class AbstractEvent 
{ 
    @JsonView(Views.Detailed.class) 
    public String type; 

    @JsonView(Views.Detailed.class) 
    public String id; 

    @JsonView(Views.Minimal.class) 
    public long time; 
} 

答えて

1

以前はJsonTypeInfo.As.EXISTING_PROPERTYを使ってみたときに型の定義に失敗しました。それを元に戻し、それぞれの子クラスの型を定義することもできます。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type", visible = true) 
@JsonSubTypes({ 
     @JsonSubTypes.Type(value = PlayerSpawnedEvent.class, name = "PlayerSpawnedEvent"), 
     @JsonSubTypes.Type(value = PlayerStateChangedEvent.class, name = "PlayerStateChangedEvent") 
}) 

public abstract class AbstractEvent 
{ 
    @JsonView(Views.Detailed.class) 
    public String type; 

    @JsonView(Views.Detailed.class) 
    public String id; 

    @JsonView(Views.Minimal.class) 
    public long time; 
} 

public class PlayerSpawnedEvent 
{ 
    public PlayerSpawnedEvent() { type = "PlayerSpawnedEvent"; } 
} 

public class PlayerStateChangedEvent 
{ 
    public PlayerStateChangedEvent() { type = "PlayerStateChangedEvent"; } 
} 
関連する問題