Свойство автоматического приращения с Джексоном - PullRequest
0 голосов
/ 29 мая 2018

У меня есть существующий объект, который я не могу изменить, к которому мы хотим добавить свойство пользовательского идентификатора во время сериализации.

TestEntity {
  ...
  @JsonProperty("addresses")
  List<Address> addresses;
  ...
}
Address {
   // NOTE NO ID
   String street
   String number
   ...
}

В идеале мы хотели бы иметь возможность превратить это в XML с идентификатором, связанным с каждым Address объектом.

...
<Addresses>
  <Address id=1>
   <street>...</street>
   ...
  </Address>
  <Address id=2>
   <street>...</street>
   ...
  </Address>
  <Address id=3>
   <street>...</street>
   ...
  </Address>
</Addresses>

В настоящее время я смотрю на пользовательский класс миксина, но не знаю, есть ли лучший вариант.

Есть идеи, как лучше решить эту проблему?

===============================================

Редактировать: В настоящее время мы сериализуем на основе TestEntity, поэтому я не могу создать упаковочную сущность.

...
objectMapper.writeAsString(testEntity);

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

А как же пользовательский миксин?

@JsonAppend(
attrs = {
    @JsonAppend.Attr(value = "id")
}) 
public static class WithIdMixin {}

А потом:

mapper.addMixIn(POJO.class, WithIdMixin.class);

ObjectWriter writer = mapper.writerFor(POJO.class).withAttribute("id", someGlobalLong++);
0 голосов
/ 29 мая 2018

Я не понимаю.Почему бы вам не использовать Наследование?

class IdentifiableAddress extends Address {
    private long id;

    // Getter/Setter...
}

Возможно, я что-то упустил.Что означает «не модифицируемый»?Вы не можете изменить объект или класс?

...