Есть ли способ автоматически сгенерировать плоское pojo из pojo с композицией объекта?

Мне нужно хранить документы в индексах Elasticsearch, поэтому я определил сопоставление. Из моего java-клиента мне нужно предоставить ему pojo, который выглядит как класс Compony. Он имеет много повторяющихся значений. Я мог бы использовать шаблон композиции объектов, чтобы решить эту проблему, но Elasticsearch не может обрабатывать такую ​​​​структуру, и поэтому он ожидает плоскую структуру.

class Company {
    private String postalstreetName;
    private String postalHouseNumer;
    private String postalHouseLetter;
    private String postalHouseNumberAddition;
    private String postalZipCode;
    private String postalCity;
    private String postalCountry;

    private String visitorstreetName;
    private String visitorHouseNumer;
    private String visitorHouseLetter;
    private String visitorHouseNumberAddition;
    private String visitorZipCode;
    private String visitorCity;
    private String visitorCountry;

    private String establishmentstreetName;
    private String establishmentHouseNumer;
    private String establishmentHouseLetter;
    private String establishmentHouseNumberAddition;
    private String establishmentZipCode;
    private String establishmentCity;
    private String establishmentCountry;
}

Я действительно хочу, чтобы pojo, как показано ниже, и каким-то образом автоматически генерировал pojo выше с той же структурой именования.

class Address {
    private String streetName;
    private String houseNumer;
    private String houseLetter;
    private String houseNumberAddition;
    private String zipCode;
    private String city;
    private String country;
}
class Company {
    private Address postalAddress;
    private Address visitorAddress;
    private Address establishmentAddress;
}

Кто-нибудь знает, возможно ли что-то подобное, чтобы автоматически генерировать плоское pojo из pojo с композицией объекта с префиксом имени для всех полей?

Попробуйте jsonschema2pojo.org . Он будет генерировать классы Pojo, если предоставлен какой-либо пример Json. По крайней мере, усилия по созданию класса будут сохранены.

CourseTriangle 31.01.2019 12:37

Спасибо, я пробовал, но это не то, что я искал. Он не создавал автоматически вложенные объекты

Hakan54 06.02.2019 13:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
491
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я получил решение для моей проблемы. Elasticsearch ожидает объект json со структурой, которая есть у меня в первом примере. Итак, что я сделал, так это добавил @JsonUnwrapped в поле со значением префикса, поэтому мой класс Company выглядит так:

class Company {
    @JsonUnwrapped(prefix = "postal")
    private Address postalAddress;
    @JsonUnwrapped(prefix = "visitor")
    private Address visitorAddress;
    @JsonUnwrapped(prefix = "Establishment")
    private Address establishmentAddress;
}

И результатом будет:

{
  "postalStreetName":"",
  "postalHouseNumer":"",
  "postalHouseLetter":"",
  "postalHouseNumberAddition":"",
  "postalCity":"",
  "postalCountry":"",
  "visitorStreetName":"",
  "visitorHouseNumer":"",
  "visitorHouseLetter":"",
  "visitorHouseNumberAddition":"",
  "visitorCity":"",
  "visitorCountry":"",
  "establishmentStreetName":"",
  "establishmentHouseNumer":"",
  "establishmentHouseLetter":"",
  "establishmentHouseNumberAddition":"",
  "establishmentCity":"",
  "establishmentCountry":""
}    

Так что мне не нужно каким-то волшебным образом создавать эти pojo, потому что Джексон может создавать файлы JSON, которые мне нужны.

Другие вопросы по теме