2016-12-11 7 views
1

私は自分のエンティティにいくつかの共通のプロパティを提供する抽象クラスを持っています。以下は抜粋です。シリアル化時に仮想JSONプロパティを作成する方法は?

@MappedSuperclass 
public class AbstractEntity implements Serializable { 
    @Id 
    @GeneratedValue 
    private long id; 

    @Temporal(value = TemporalType.TIMESTAMP) 
    @JsonProperty(access = Access.READ_ONLY) 
    private Date createdOn; 

    @Temporal(value = TemporalType.TIMESTAMP) 
    @JsonProperty(access = Access.READ_ONLY) 
    private Date modifiedOn; 

    ⋮ 
} 

JSONにサブクラスをシリアル化するとき、私は期待どおりの結果を得る、例えば、これは直列化からの抜粋です:

{ 
    "createdOn": "2016-12-11T15:35:23Z", 
    "modifiedOn": "2016-12-11T15:35:23Z", 
    ⋮ 
} 

私が連載それらの共通の性質を持っている必要があります上記の例は次のようになりますようにJSONオブジェクトに:

{ 
    "_metadata": { 
    "createdOn": "2016-12-11T15:35:23Z", 
    "modifiedOn": "2016-12-11T15:35:23Z", 
    } 
    ⋮ 
} 

私はすでにMetadataというクラスを使用しての性質を有する試してみましたそのタイプはうまくいきます。しかし、ジャクソンの注釈を使用するだけの方が簡単で簡単な方法があるのだろうかと思います。

+0

それはおそらく重複質問です。参照:[http://stackoverflow.com/questions/19158345/custom-json-deserialization-with-jackson](http://stackoverflow.com/questions/19158345/custom-json-deserialization-with-jackson) –

答えて

0

JPA @Embeddableクラスを作成すると、目的の出力が得られます。それより簡単なことが分かりません。

埋め込み:

@Embeddable 
public class MetaData{ 

    @Temporal(value = TemporalType.TIMESTAMP) 
    @JsonProperty(access = Access.READ_ONLY) 
    private Date createdOn; 

    @Temporal(value = TemporalType.TIMESTAMP) 
    @JsonProperty(access = Access.READ_ONLY) 
    private Date modifiedOn; 
} 

エンティティ:

@MappedSuperclass 
public class AbstractEntity implements Serializable { 
    @Id 
    @GeneratedValue 
    private long id; 

    @Embedded 
    private Metadata metdata; 
} 
+0

それは私が試したソリューションであり、実際にはうまくいきます。問題は、デフォルトでは、Spring Data RESTはJSON直列化で 'id'を含まないため、メタデータオブジェクトに含めることです。私はコンストラクタに沿ってそれを渡すことができましたが、私はデータを複製しています。これは(他のものの中でも)エレガントではありません。 –

関連する問題