2016-04-19 19 views
0

Ich habe ein Hauptziel wie folgt aus:serialize Objektinstanz Grundeigenschaft jackson

public class MainObject{ 

     @Column(unique = false, updatable = true, insertable = true, nullable = true, length = 255, scale = 0, precision = 0) 
     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     private Long id; 

     @Column(unique = true, updatable = true, insertable = true, nullable = true, length = 255, scale = 0, precision = 0) 
     @Basic 
     private String name; 

     @JsonIgnoreProperties({"address" ... }) 
     @ManyToOne(optional = true, targetEntity = Company.class) 
     private Child child; 

    } 

Ich würde dies als mit nur einer Eigenschaft des Child-Objekt serialisiert wie „basic“ Typ. Wie Sie sehen können, ist meine beste Lösung, alle anderen Eigenschaften des untergeordneten Objekts zu ignorieren.

ist mein Ziel, etwas wie diese:

{ 
    "id" = 12, 
    "name" = "some name", 
    "company" = 42 
} 

aber mit meiner besten Lösung so weit, Hexe können Sie sehen, ober i folgende erhalten:

{ 
     "id" = 12, 
     "name" = "some name", 
     "company" = { 
      "id" = 42 
     } 
    } 

Ich weiß, es ist Anmerkung Hexe Ich kann in Kind-Objekt verwenden, aber hier kommt der schwierige Teil, in einem anderen Teil in meinem Programm möchte ich das Kind normal zu serialisieren.

public class Child{ 

    @Column(unique = false, updatable = true, insertable = true, nullable = true, length = 255, scale = 0, precision = 0) 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(unique = true, updatable = true, insertable = true, nullable = true, length = 255, scale = 0, precision = 0) 
    @Basic 
    private String name; 

    @Column(unique = true, updatable = true, insertable = true, nullable = true, length = 255, scale = 0, precision = 0) 
    @Basic 
    private String address; 

    ... 
} 

Gibt es einen einfachen Weg mit Anmerkungen, um zu bekommen, was ich will?

+1

nicht so einfach, aber machbar http erstellen: // www.baeldung.com/jackson-custom-serialisation – gigadot

Antwort

0

Danke für Hilfe @gigadot, aber ich fand einen faulen Weg.

Also ich nur einfach ignoriert das Kind

@JsonIgnore 
@ManyToOne(optional = true, targetEntity = Company.class) 
private Child child; 

Und dann habe ich eine einfache Methode, mit @JsonProperty ("Kind")

@JsonProperty("child") 
    public Long getChildId(){ 
     return this.child.getId(); 
    }