2016-12-11 30 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類和具有的性質已經嘗試過該類型確實運作良好。但是我想知道是否有更容易或更簡單的方法使用Jackson註釋?

+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',我想將它包含在元數據對象中。我可以沿着構造函數傳遞它,但是我複製的數據不夠優雅(除其他外)。 –