исключение при использовании аннотаций jackson и ormlite вместе в одном объекте

Я использую библиотеку Jackson для анализа json в объект и использую ormlite для хранения тех же объектов в sqlite db. Вот мои модельные классы:

public class Site {
    private String uniqueId;
    private String name;
    private ForeignCollection<ContactDetails> items;

    @JsonProperty("contact_details")
    public void setContactDetails(ForeignCollection<ContactDetails> contact_details) {
        this.items = contact_details;
    }

    public List<ContactDetails> getContactDetails() {
        return new ArrayList<ContactDetails>(items);
    }

    public String getUniqueId() {
        return uniqueId;
    }
    @JsonProperty("unique_id")
    public void setUniqueId(String uniqueId) {
        this.uniqueId = uniqueId;
    }
    public String getName() {
        return name;
    }
    @JsonProperty("name")
    public void setName(String name) {
        this.name = name;
    }
}

а класс ContactDetails:

public class ContactDetails {

    @JsonProperty("contact_detail_id")
    int getContactDetailId;
    @JsonProperty("cellphone_number")
    String getCellphoneNumber;
    @JsonProperty("email")
    String getEmail;
    @JsonProperty("name")
    String getName;
}

и мой json:

{
    "unique_id": "WDV000282",
    "name": "2XL - Diverse werken - Zeebrugge",

    "contact_details": [
        {
            "contact_detail_id": 20647,
            "cellphone_number": "123456",
            "email": "[email protected]",
            "name": "plabon",

        },
        {
            "contact_detail_id": 20648,
            "cellphone_number": "",
            "email": "[email protected]",
            "name": "test",

        }
    ]
}

Но когда я выполняю readvalue:

Site test= objectMapper.readValue(json, Site.class); 

я получаю следующее исключение

org.codehaus.jackson.map.JsonMappingException: Can not find a deserializer for non-concrete Collection type [collection type; class com.j256.ormlite.dao.ForeignCollection, contains [simple type, class com.example.jacksonparsingtest.ContactDetails]]

Я не понимаю, что происходит? Помогите, пожалуйста...


person rawcoder064    schedule 26.02.2013    source источник


Ответы (2)


Поскольку ForeignCollection — это интерфейс, Джексон не может создать экземпляр нового объекта такого типа. Я бы попытался либо аннотировать поле с помощью @JsonDeserialize(as=ConcreteSubclassOfForeignCollection.class ) используйте конкретный подкласс, например BaseForeignCollection или используйте простой список, как в этом решении: https://stackoverflow.com/a/14920916/2021412.

person nutlike    schedule 27.02.2013

Я решил проблему, используя Collection вместо ForeignCollection. Теперь Джексон может анализировать Collection.

person rawcoder064    schedule 02.03.2013
comment
Это в основном третье предложение моего ответа … - person nutlike; 02.03.2013
comment
Да, я видел это сейчас. Спасибо, я принимаю ваш ответ. Отзовите свой отрицательный голос. - person rawcoder064; 02.03.2013
comment
Я столкнулся с другой проблемой при вставке этих данных в db. Я открыл для этого отдельную тему. Не могли бы вы мне помочь. вот ссылка - person rawcoder064; 02.03.2013
comment
Невозможно отменить голосование (до тех пор, пока не будет внесено редактирование), но ваш вопрос будет проголосован за (чрезмерную) компенсацию. - person nutlike; 02.03.2013