Десериализация пользовательской коллекции с абстрактным содержанием класса - PullRequest
1 голос
/ 14 мая 2019

У меня есть следующая проблема:

Система:

public class System {
    @JsonDeserialize(converter = MyDeserializer.class)
    ObservableList<AClass> aClassList;
}

AClass:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "dataType")
@JsonSubTypes({
        @JsonSubTypes.Type(value = SubA.class),
        @JsonSubTypes.Type(value = SubB.class)
 })
public abstract class AClass{
}

SubA:

public class SubA extends AClass{
    public SubA(String name) {
    }
}

SubB:

public class SubB extends AClass{
    public SubB(String name) {
    }
}

MyDeserializer:

public class MyDeserializer implements Converter<List<AClass>, ObservableList<AClass>> {
    @Override
    public ObservableList<AClass> convert(List<AClass> celestialBodyList) {
        return FXCollections.observableList(celestialBodyList);
    }

    @Override
    public JavaType getInputType(TypeFactory typeFactory) {
        return typeFactory.constructCollectionType(List.class, AClass.class);
    }

    @Override
    public JavaType getOutputType(TypeFactory typeFactory) {
        return typeFactory.constructCollectionType(ObservableList.class, AClass.class);
    }
}

Когда я пытаюсь десериализовать класс System, я получаю следующую ошибку:

com.fasterxml.jackson.databind.JsonMappingException: Cannot find a deserializer for non-concrete Collection type [collection type; class javafx.collections.ObservableList, contains [simple type, class AClass]]

Как вы можете видеть, Джексон не может найтиdeserializer, хотя я определил один с помощью аннотации.

Надеюсь, кто-то может мне помочь с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...