Борьба с чем-то, что выглядит тривиально и должно работать без проблем. У меня JSON с свойством «@class» и, не зная, что это класс в момент вызова, readValue() хочет десериализовать его в объект класса, на который ссылается «@class». Вместо этого я получаю ссылку «LinkedHashMap».Trivial JSON jackson полиморфная десериализация
@Test
public void toJsonAndBack() throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(new Sample("id"));
assertTrue(json.contains("@class"));
Sample obj = (Sample)mapper.readValue(json, Object.class);
}
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS)
static class Sample {
private String id;
public Sample() {
}
public Sample(String id) {
this.id = id;
}
public String getId() {
return id;
}
}
Извините, если одурачить, но не удалось найти точно такую же проблему. Большинство людей имеют более сложные случаи, когда есть базовый класс, который также аннотируется и т. Д. Эти случаи действительно работают нормально.
Я использую Джексон 2.6.6
Не уверен, что я понимаю ваш вопрос, но правильная идиома для де-сериализации просто будет «Образец obj = mapper.readValue (json, Sample.class);', no casting. – Mena
@Mena В действительности, конечно, случай немного сложнее, это просто пример, иллюстрирующий желаемое поведение. Я не могу использовать информацию о типе. – Stas