2016-06-09 6 views
0

Serialisierung Aufgabe der folgenden Klasse yeilds String wieJackson serialisiert und Wrap-Attribute in ein neues Objekt

public class User implements Serializable{ 

    private Integer id; 
    private String name; 
    private Integer pinCode; 
    private String city; 

    // getters /setters 
} 

{"id":1,"name":"XYZ","pinCode":123456,"city":"ABC"} 

Aber wir wollen, dass PIN-Code-Attribute und Stadt sollte ein Teil der neuen Json Knoten sagen Knotenadresse sein.

Also meine Erwartung des Ergebnisses ist:

{ 
    "id": 1, 
    "name": "XYZ", 
    "address": { 
    "pinCode": 123456, 
    "city": "ABC" 
    } 
} 

Kann diese Struktur ohne neu zu organisieren, die Klasse erreicht werden und unter Verwendung von Json Anmerkungen

auf den genaue Gegenteil Linien @JsonUnwrapped

Antwort

-1

Fügen Sie eine weitere Klasse namens Address wie folgt hinzu:

public class Address implements Serializable { 

    private Integer pinCode; 
    private String city; 

    // getters /setters 
} 

Dann Address Klasse innerhalb User Klasse verwenden, wie unten:

public class User implements Serializable { 

    private Integer id; 
    private String name; 
    private Address address; 
    // getters /setters 
} 

Jetzt Jackson wie Sie JSON-String geben:

{ 
    "id": 1, 
    "name": "XYZ", 
    "address": { 
    "pinCode": 123456, 
    "city": "ABC" 
    } 
} 

@JsonProperty ("address.pinCode") verwendet Feldnamen in json einstellen . Bitte beachten Sie doc hier für mehr Details JsonProperty

+0

@JsonUnwrapped - erreicht genau das Gegenteil Wirkung. Erwartete etwas an dieser Front – hemantvsn

+0

@hemantvsn - yeah JsonUnwrapped append innere Klassenfelder in Basisklasse json http://fasterxml.github.io/jackson-annotations/javadoc/2.0.0/com/fasterxml/jackson/annotation/JsonUnwrapped. html – developerbhuwan

+0

Also meine Notwendigkeit ist etwas, das gegenüber Job von @JsonUnwrapped tut: P – hemantvsn

1

können Sie eine solche Abhilfe verwenden (aber bevorzugt JsonSerialize zu verwenden):

public class User implements Serializable{ 

    private Integer id; 
    private String name; 

    @JsonIgnore 
    private Integer pinCode; 

    @JsonIgnore 
    private String city; 

    @JsonProperty("address") 
    public Map<String, Object> getAddress() { 
     Map<String, Object> map = new HashMap<>(); 
     map.put("pinCode", pinCode); 
     map.put("city", city); 
     return map; 
    } 

    //Deserealization 
    public void setAddress(Map<String, Object> map) { 
     if(map!=null) { 
      city = (String) map.get("city"); 
      pinCode = (Integer) map.get("pinCode"); 
     } 
    } 

    // getters /setters 
} 

Dank @hemantvsn für Deserialisierung Beispiel

+0

Wunschwunsch: {"id": 1, "name": "XYZ", "Adresse": {"pinCode": 411001, "city": "PUNE"}} – hemantvsn

+1

Dies sollte auch für die Deserialisierung funktionieren public void setAddress (Map Karte) { \t \t if (Karte! = null) { \t \t \t city = (String) map.get ("Stadt"); \t \t \t pinCode = (Integer) map.get ("pinCode"); \t \t} \t} – hemantvsn

Verwandte Themen