Мне нужно хранить документы в индексах 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 с композицией объекта с префиксом имени для всех полей?
Спасибо, я пробовал, но это не то, что я искал. Он не создавал автоматически вложенные объекты




Я получил решение для моей проблемы. 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, которые мне нужны.
Попробуйте jsonschema2pojo.org . Он будет генерировать классы Pojo, если предоставлен какой-либо пример Json. По крайней мере, усилия по созданию класса будут сохранены.