Как десериализовать поля в объект, используя Джексона? - PullRequest
0 голосов
/ 03 июня 2018

Я пытался десериализовать следующий json в POJO.

{
  "foo": {
    "key1":"dummy",
    "key2":"dummy"
  },
  "bar": {
    "key1":"dummy",
    "key2":"dummy",
    "key3":"dummy"
  },
  "bazKey1":"dummy",
  "bazKey2":"dummy",
  "bazKey3":"dummy",
  "bazKey4":"dummy"

  // Many others....
}

Вы можете видеть выше странные baz свойства ...
Но я хочу трактовать baz как объект, подобный fooи bar.

public class Pojo {
  private Foo foo;
  private Bar bar;
  private Baz baz;

  // Many others....
}

Однако я только что нашел плохое решение, использующее нестандартный десериализатор.

Плохое решение

@Override
public Pojo deserialize(JsonParser p, DeserializationContext ctxt) throws Exception {
  ObjectCodec codec = p.getCodec();
  JsonNode node = codec.readTree(p);

  Baz baz = new Baz.Builder()
      .key1(node.get("bazKey1").textValue())
      .key2(node.get("bazKey2").textValue())
      .key3(node.get("bazKey3").textValue())
      .key4(node.get("bazKey4").textValue())
      .build();

  // We have to write annoying (setter/constructor/builder) instead of below method.
  // return codec.treeToValue(node, Pojo.class);
  return new Pojo.Builder()
      .foo(foo)
      .bar(bar)
      .baz(baz)
      .other(other)
      .other(other)
      .other(other) // Many others...
      .build();
}

Это решение заставляет нас использовать раздражающие(сеттер / конструктор / строитель).


Как десериализовать поля в объект, используя Джексона?
Кроме того, этот POJO является Неизменным объектом.

1 Ответ

0 голосов
/ 03 июня 2018

Суть Джексона в том, что ты не в этой ситуации.Причина, по которой вы вообще используете Джексона, заключается в том, что когда у вас есть Java-объект Baz, он представлен свойством JSON baz, которое содержит объект, а когда у вас есть несколько строковых JSON-свойств, они представлены в Java с несколькими полями String:то же имя.

Если это не та ситуация, в которой вы находитесь, то нет причин рассматривать Джексона.Используйте любую библиотеку синтаксического анализа JSON и создайте объекты Java из дерева JSON.Вы можете использовать отражение Java, чтобы обнаружить поля / методы класса Java и установить / вызвать их на основе имен свойств JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...