2016-12-11 3 views
1

Ich habe diese abstrakte Klasse, die einige gemeinsame Eigenschaften für meine Entitäten bietet. Der folgende Text ist ein Auszug:Wie erstellt man eine virtuelle JSON-Eigenschaft beim Serialisieren?

@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; 

    ⋮ 
} 

Wenn eine Unterklasse der Serialisierung JSON ich die erwarteten Ergebnisse zu erhalten, zum Beispiel, das ist ein Auszug aus der Serialisierung:

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

Ich brauche diese gemeinsame Eigenschaften haben serialisiert zu einem JSON-Objekt, so dass das obige Beispiel wie folgt aussieht: habe

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

ich bereits versucht, eine Klasse mit Metadata und mit einer Eigenschaft namens dieser Typ funktioniert gut. Aber ich frage mich, ob es einen einfacheren oder einfacheren Weg gibt, nur Jackson Annotationen zu verwenden?

+0

Es ist möglicherweise eine erneute Frage. Siehe: [http://stackoverflow.com/questions/19158345/custom-json-deserialization-with-jackson](http://stackoverflow.com/questions/19158345/custom-json-deserialization-with-jackson) –

Antwort

0

Sie können eine JPA @Embeddable Klasse erstellen und Sie sollten die gewünschte Ausgabe erhalten. Ich bin mir nicht sicher, was einfacher sein könnte.

Fähiges:

@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; 
} 

Entity:

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

    @Embedded 
    private Metadata metdata; 
} 
+0

Das ist eine Lösung, die ich ausprobiert habe und tatsächlich funktioniert. Das Problem besteht darin, dass Spring Data-REST standardmäßig die ID in der JSON-Serialisierung nicht enthält, und ich möchte sie in das Metadatenobjekt aufnehmen. Ich könnte es entlang eines Konstruktors weitergeben, aber dann dupliziere ich Daten, die nicht elegant sind (unter anderem.) –

Verwandte Themen