десериализатор jackson json со списком подузлов элементов

У меня есть десериализатор для MyObject, расширяющий StdDeserializer<MyObject>. В своем deserialize(JsonParser p, DeserializationContext ctxt) я хотел бы преобразовать подузел узла, который десериализуем, в список pojos. Учитывая json как

{
  "property1" : "value1",
  ...
  "subnode" : [
    {
      "snProperty1" : "value1",
      "snProperty2" : "value2",
      ...
      "snPropertyN" : "valueN"
    },
    { ... }, // other elements like the one above
    { ... }
 ],
  ...
}

и pojos

class Subnode {
    private String snProperty1;
    private String snProperty2;
    ...
    private Stirng snPropertyN;
    // getters and setters
}

class MyObject {
    private String property1;
    ...
    private List<Subnode> subnodes;
    // getters and setters
}

Я хочу, чтобы десериализатор обрабатывал все объекты Subnode без повторения и использования Subnode сеттеров самостоятельно. Что-то похожее на TypeReferences и ObjectMapper.

Единственный способ создать экземпляр ObjectMapper для выполнения вышеуказанного? Как например

objectMapper.convertValue(subnode, new TypeReference<List<Subnode>>() {});

person geco17    schedule 27.04.2018    source источник


Ответы (1)


Я решил это без использования ObjectMapper с помощью кодека парсера (p).

List<Subnode> subnodes = new ArrayList<>();
if (myObject.hasNonNull("subnodeList")) {
    ObjectCodec codec = p.getCodec();
    for (JsonNode subnode : myObject.get("subnodeList")) {
        subnodes.add(codec.treeToValue(subnode, Subnode.class));
    }
}
myObject.setSubnodes(subnodes);
person geco17    schedule 27.04.2018