2016-07-04 7 views
1

jsonの文字列と配列をJavaリストにマップしたいと思います。 Javaクラスは次のとおりです。ジャクソンjsonは、リスト内の文字列と配列を<String>にマップします

public class MyDTO { 

    private String identifier; 


    @JsonFormat(with=Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) 
    private Map<String, List<String>> parameters; 

    public String getIdentifier() { 
     return identifier; 
    } 
    public void setIdentifier(String identifier) { 
     this.identifier = identifier; 
    } 
    public Map<String, List<String>> getParameters() { 
     return parameters; 
    } 
    public void setParameters(Map<String, List<String>> parameters) { 
     this.parameters = parameters; 
    } 

} 

次の両方のjsonサンプルを上記のJavaクラスに正しくマップすることを希望します。

// SAMPLE1

{ "識別子": "myIdentifier"、 "パラメータ":{ "PARAM1": "値"}}

// SAMPLE2

{"識別子": "myIdentifier"、 "parameters":{ "param1":["value1"、 "value2"]}}

私は地図プロパティのACCEPT_SINGLE_VALUE_AS_ARRAYを使用してみましたが、私はそれが内側の一覧

に適用取得されていない任意のソリューションをと思いますか?

ありがとうございました。

答えて

0

@JsonFormatは、このような種類の逆シリアル化を構成するための適切な注釈ではありません。注釈ベースのPOJO構成では正しい結果が得られません。代わりに、生のJSON文字列を受け入れ、必要な設定でobjectmapperを使用して逆シリアル化します。

String json1 = "{ \"identifier\": \"myIdentifier\", \"parameters\":{ \"param1\": \"value\" } }\n"; 
String json2 = "{ \"identifier\": \"myIdentifier\", \"parameters\":{ \"param1\": [\"value1\", \"value2\"] } }"; 
ObjectMapper mapper = new ObjectMapper(); 
//mapper.enable(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY); 
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); 
try { 
    MyDTO obj1 = mapper.readValue(json1, MyDTO.class); 
    MyDTO obj2 = mapper.readValue(json2, MyDTO.class); 
}catch (Exception e){ 
    // handle 
} 
関連する問題