Это то, что Джексон называет «обработкой полиморфного типа». Есть хорошее объяснение того, как это сделать здесь . Вам нужно сказать Джексону, чтобы он вводил имя класса в JSON при его сериализации и использовал это имя класса при десериализации. Это делается с помощью аннотации:
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,
include=JsonTypeInfo.As.PROPERTY, property="kind")
[Источник: @StaxMan (ниже).]
Если у вас нет контроля над форматом JSON, вы можете использовать Джексона, чтобы десериализовать его в некоторый общий промежуточный объект, а затем написать код, который создаст из него нужный объект подкласса. Либо используйте библиотеку json.org для десериализации строки JSON в org.json.JSONObject, а затем напишите код для создания нужных объектов на основе свойств JSONObject.