Лучший способ переназначить плоский объект в структурированный объект в Java - PullRequest
2 голосов
/ 13 февраля 2020

Я работаю с технологией Verastream Host Integrator. По сути, VHI - это инструмент без кода / с низким кодом GUI для работы с данными мэйнфрейма, который компилируется в Java привязок.
Одна из проблем с VHI заключается в том, что он может выводить только плоские данные. Вот пример:

public class VhiProcedureRecord {
    private String foo1;
    private String foo2;
    private String bar1;
    private String bar2;

    // constructors, getters, and setters
}

Я передаю этот вывод через слой промежуточного ПО Spring Boot и хочу переназначить этот объект во что-то, что будет выглядеть так:

public class Foo {
    private String foo1;
    private String foo2;

    // constructors, getters, and setters
}

public class Bar {
    private String bar1;
    private String bar2;

    // constructors, getters, and setters
}

public class MyRecord {
    private Foo foo;
    private Bar bar;

    // constructors, getters, and setters
}

Как Вы можете видеть, что это требует разделения полей в VhiProcedureRecord между Foo и Bar. Выполнение этого вручную быстро становится огромной болью.

Другая проблема с выводом, являющимся плоским, состоит в том, что, когда вывод VHI содержит список данных, он возвращает несколько записей с дублирующимися полями, аналогично тому, что объединение SQL будет выглядеть, например,

public class VhiPetOwnershipRecord {
    private String ownerName;
    private String petName;

    // constructors, getters, and setters
}

Результат этой процедуры возвращает что-то похожее на:

[
  {"ownerName": "JHuang", "petName": "Fido"},
  {"ownerName": "JHuang", "petName": "Spot"}
]

И я хочу переназначить это в:

public class MyPetOwnershipRecord {
    private String ownerName;
    private List<String> petName;
}

Is Есть ли способ использовать Джексона или что-то подобное для автоматического перераспределения такого рода?

Имейте в виду, что VhiProcedureRecord компилируется VHI, поэтому класс нельзя изменить.

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