2016-07-04 3 views
1

Я хотел бы нарисовать json string и array в списке Java. Класс Java выглядит следующим образом.Jackson json bind String and Array to List <String> внутри a map

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 
}