У меня есть JSON, который выглядит так:
{
"totalSize": 11,
"done": true,
"records": [
{
"attributes": {
"type": "Team_Member",
"url": "/services/data/Team_Member/xxxx"
},
"Age": 48,
"Birth_Date": "1971-05-17",
"Business": null,
"Citizenship": null,
"Country": "UK",
...other fields...
},
{ other records ....}
]
}
Объекты в массиве records могут быть разных типов, но не будут смешанными. Во время десериализации поле атрибутов можно игнорировать.
Я пытаюсь десериализовать его с Джексоном в этот класс Java:
@lombok.Data
public class QueryResult<C extends BaseObject> {
private int totalSize;
private boolean done;
private List<C> records;
}
И подклассы BaseObject будут иметь обязательные поля, например:
public class TeamMember extends BaseObject {
public int Age;
public Date Birth_Date;
//etc...
}
Вот код десериализации:
public <C extends BaseObject> QueryResult<C> doQuery(Class<C> baseObjectClass) {
String json = ...get json from somewhere
ObjectMapper mapper = new ObjectMapper();
try {
JavaType type = mapper.getTypeFactory().constructCollectionLikeType(QueryResult.class, baseObjectClass);
return mapper.readValue(json, type);
} catch (Exception e) {
throw new RuntimeException(e);
}
Но это не удачно, я получаю исключение:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot find a Value deserializer for type [collection-like type; class com.foo.QueryResult, contains [simple type, class com.foo.TeamMember]]
Любое предложение будет оценено.
1
NickJ
20 Дек 2019 в 18:46
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].