2017-01-20 17 views
1

私はジャクソンJSON LIB 2.8を使用しています、と私はJson.mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true);ジャクソンJSONマッピングJSONキー

を使用していますが、時々私はPOJOが属性を持っている

のような2つの貴様名を持ついくつかのフィールドをマップする必要がありますbuilindgと私はそれをbuildingUidにマップする必要がありますかBUILDINGはJSONにどのようなキーが存在するかによって異なりますが、これを行う方法はありますか?

例:クライアント

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

} 

と私の他のソースされています:

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

} 

と私は2つの異なるソースを持って、一つはこの形式でJSONを返す私のデータベースです

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

私の問題は、UIDとIDの両方を使用してIDをマップすることですが、私は最初のマップを:

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

が、他のソースは、UIDであると私は

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

マイポストを更新しました – azelix

答えて

2

ような何かをするときに自動的にそれをマッピングする方法を知らないそれは@JsonSetter

で注釈を付け、複数のセッターを使用して可能です次のようなものを試してください:

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); 
    }   

} 

しかしそれはちょっと面倒です(解決策は動的ではありません)。

関連する問題