Я использую Jackson ObjectMapper для десериализации представления JSON объекта, который содержит интерфейс в качестве одного из его свойств. Здесь можно увидеть упрощенную версию кода:
https://gist.github.com/sscovil/8735923
В принципе, у меня есть класс Asset с двумя свойствами: type и properties. Модель JSON выглядит так:
{
    "type": "document",
    "properties": {
        "source": "foo",
        "proxy": "bar"
    }
}
Свойство properties определяется как интерфейс под названием AssetProperties, и у меня есть несколько классов, которые его реализуют (например, DocumentAssetProperties, ImageAssetProperties). Идея состоит в том, что файлы изображений имеют разные свойства (высота, ширина), чем файлы документов, и т.д.
Я отработал примеры из этой статьи, прочитал документы и вопросы здесь, на SO и за ее пределами, и экспериментировал с различными конфигурациями в @JsonTypeInfo параметры аннотации, но не смогли взломать эту гайку. Любая помощь будет принята с благодарностью.
Совсем недавно исключение, которое я получаю, следующее:
java.lang.AssertionError: Could not deserialize JSON.
...
Caused by: org.codehaus.jackson.map.JsonMappingException: Could not resolve type id 'source' into a subtype of [simple type, class AssetProperties]
Спасибо заранее!
РЕШЕНИЕ:
Благодаря большому спасибо @Michał Ziober, я смог решить эту проблему. Я также мог использовать Enum в качестве идентификатора типа, который занимал часть Googling. Вот обновленный Gist с рабочим кодом:
