Джексон JSON десериализатор со списком подузлов элементов - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть десериализатор для 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. Нечто похожее на TypeReference с и ObjectMapper.

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

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

1 Ответ

0 голосов
/ 27 апреля 2018

Я решил это без использования 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);
...