Jaskson Json Сериализация полиморфная с наследованием - PullRequest
0 голосов
/ 15 ноября 2018

Попытка сериализации Json в Object была реализована и имеет непримитивный тип данных. Вот код, который я пытаюсь запустить.

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = 
 JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({
        @JsonSubTypes.Type(value = Child.class, name = "Child")
})
public interface Parent {

}

.

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "cdata"
})
public class Child implements Serializable, Parent {

    private static final long serialVersionUID = 34658537546173718L;

    @JsonProperty("cdata")
    private Cdata cdata;
}

.

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "version"
})
public class Cdata implements Serializable {
    private static final long serialVersionUID = -7706669244151885541L;

    private String version;
}

.

ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
mapper.configure( MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true );
Parent parent = mapper.readValue("jsonString", Parent.class);

Это ошибка, которую я получаю, когда запускаю приведенный выше код:

com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Не удалось определить идентификатор типа 'cdata' как подтип [простой тип, класс Child]: известный тип ids = [Child] в

1 Ответ

0 голосов
/ 15 ноября 2018

Хорошо, после небольшой помощи от @Baldy.Я выяснил, что изменение типа по умолчанию на OBJECT_AND_NON_CONCRETE решило проблему.

mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE);

...