Джексон json привязывает строку и массив к списку <String> на карте

2

Я хотел бы сопоставить строку json и массив с Java-списком. Класс Java выглядит следующим образом.

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", "parameters": {"param1": "value"}}

//sample2

{"identifier": "myIdentifier", "parameters": {"param1": ["value1", "value2"]}}

Я попытался использовать ACCEPT_SINGLE_VALUE_AS_ARRAY для свойства Map, но я думаю, что он не применяется к внутреннему списку

Любые решения?

Благодарю.

Теги:
spring-boot
spring
jackson

1 ответ

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
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню