2017-01-20 50 views
1

我使用JSON傑克遜LIB 2.8,我使用Json.mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true);與JAVA BEAN傑克遜JSON映射JSON鍵

但有時我需要有兩個型動物的名字某些字段映射像

POJO具有屬性builindg,我需要將它映射到buildingUidBUILDING取決於JSON中存在什麼鍵,他們是否有辦法做到這一點?

實施例:

public class Building extends Bean { 
    private UUID id; 
    private String name; 

} 

和我有兩個不同的來源,一個是我的數據庫,該數據庫返回一個JSON這種格式:

{ 
"ID":"build", 
"NAME":"name1" 

} 

和我的其他源的客戶機:

{ 
"UID" : "build", 
"name" : "name1" 
} 

正如你可以看到我的問題是映射ID與UID和ID,我設法映射第一個與:

Json.mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true);

但其他來源的UID,我不知道如何來自動映射,當我這樣做

Json.encode(Building.toString()); 
+0

更新了我的文章 – azelix

回答

2

有可能使用與@JsonSetter

標註的多個setter方法試試這樣:

public class Building extends Bean { 
    private String id; 
    private String name; 

    @JsonGetter("id") 
    public String getId() { 
     return id; 
    } 

    @JsonSetter("id") 
    public void setId(String id) { 
     this.id = id; 
    } 

    @JsonSetter("UID") 
    public void setUID(String id) { 
     setId(id); 
    } 

    @JsonGetter("name") 
    public String getName() { 
     return name; 
    } 

    @JsonSetter("name") 
    public void setName(String name) { 
     this.name = name; 
    } 

    @JsonSetter("NAME") 
    public void setUpperCaseName(String name) { 
     setName(name); 
    }   

} 

但它有點糟糕(解決方案不是動態的)。