Предположим, у меня есть следующий класс Java:
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Demo {
public int x;
public int y;
public List<Pair<Integer, Integer>> the_list;
}
Я хотел бы заполнить его, например. следующий формат json:
{ "x" : 1,
"y" : 2,
"the_list" : [[1,2],[3,4]]}
используя более быстрый xml
ObjectMapper mapper = new ObjectMapper();
Вероятно, я смогу добраться туда, вызвав mapper.readTree(json) и заполнив все, что мне нужно. Проблема в том, что реальный класс, который у меня есть (не демо), содержит много параметров, и я хотел бы извлечь выгоду из возможностей привязки данных.
Попытка равнины:
mapper.readValue(json, Demo.class)
дает следующую ошибку:
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of
org.apache.commons.lang3.tuple.Pair, problem: abstract types either need to be mapped to
concrete types, have custom deserializer, or be instantiated with additional type
information
Есть ли способ смешать пользовательский синтаксический анализ с привязкой данных? Я просмотрел аннотации, но не нашел ничего подходящего для этой цели (мне не удалось заставить миксины работать с дженериками, пользовательский сеттер для the_list не вызывался, вероятно, потому, что это список, JsonCreator не вариант, так как я не писал парный класс...).