2016-06-09 52 views
0

序列化下面的類yeilds字符串對象像傑克遜序列化和包裝屬性到一個新的對象

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"} 

但我們想要的屬性,PIN碼和城市應該是新的Json節點的一部分說的地址節點。

所以我對結果的期待是:

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

可以這樣無需重新組織類結構和通過的@JsonUnwrapped

回答

-1
完全相反的線使用JSON註解

完成

添加另一個類,如下所示

public class Address implements Serializable { 

    private Integer pinCode; 
    private String city; 

    // getters /setters 
} 

然後使用Address類內部User類象下面這樣:

public class User implements Serializable { 

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

現在傑克遜給你JSON字符串,如:

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

@JsonProperty( 「address.pinCode」)用於設置JSON字段名。請在這裏看到文檔的詳細JsonProperty

+0

@JsonUnwrapped - 達到完全相反的效果。期待在前面的東西 – hemantvsn

+0

@hemantvsn - 是的JsonUnwrapped將內部類字段追加到基類json http://fasterxml.github.io/jackson-annotations/javadoc/2.0.0/com/fasterxml/jackson/annotation/JsonUnwrapped。 html – developerbhuwan

+0

所以我需要的是與@JsonUnwrapped相反的工作:P – hemantvsn

1

你可以使用這種解決方法(但最好使用JsonSerialize):

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 
} 

感謝@hemantvsn解串例如

+0

正在獲取: {「id」:1,「name」:「XYZ」,「address」:{「pinCode」:411001,「city」:「PUNE」}} – hemantvsn

+1

這也適用於反序列化 公共無效setAddress(地圖<字符串,對象>地圖){ \t \t如果(地圖!= NULL){ \t \t \t城市=(字符串)map.get( 「城市」); \t \t \t pinCode =(Integer)map.get(「pinCode」); \t \t} \t} – hemantvsn