Сопоставить поле JSON, которое может иметь разные типы, с помощью Jackson?

Я получаю JSON из веб-службы и не могу влиять на формат JSON. Приведенный ниже код JSON - это просто пример, иллюстрирующий проблему. Поле cars может быть либо объектом, содержащим объекты Car , либо пустой строкой. Если бы я мог изменить веб-службу, я бы изменил пустую строку на пустой объект, например "cars": {} вместо "cars": "" .

При попытке сопоставить JSON с этим объектом Java:

public class Person {
    public int id;
    public String name;
    public Map<String, Car> cars;
}

Это работает:

{
    "id" : "1234",
    "name" : "John Doe",
    "cars" : {
        "Tesla Model S" : {
            "color" : "silver",
            "buying_date" : "2012-06-01"
        },
        "Toyota Yaris" : {
            "color" : "blue",
            "buying_date" : "2005-01-01"
        }
    }
}

И это не удается:

{
    "id" : "1",
    "name" : "The Dude",
    "cars" : ""
}

Как лучше всего справиться с этим случаем в Джексоне? Если есть пустая строка, я бы хотел получить null для поля cars . Я пробовал использовать ACCEPT_EMPTY_STRING_AS_NULL_OBJECT , но это не помогло.

7
задан Adrian H. 13 July 2011 в 19:51
поделиться