2017-01-20 49 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); 
    }   

} 

但它有点糟糕(解决方案不是动态的)。