杰克逊自动增值财产

时间:2018-05-29 18:25:52

标签: java jackson-dataformat-xml

我有一个现有的对象 - 我无法修改 - 我们希望在序列化期间添加自定义ID属性。

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

理想情况下,我们希望能够将其转换为XML,并将ID与每个Address对象相关联。

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

我目前正在寻找一个自定义mixin类,但不知道是否有更好的选择。

关于如何更好地解决这个问题的任何想法?

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

编辑:目前,我们正在基于TestEntity进行序列化,因此我无法创建包装实体。

...
objectMapper.writeAsString(testEntity);

2 个答案:

答案 0 :(得分:0)

我不明白。你为什么不使用继承?

class IdentifiableAddress extends Address {
    private long id;

    // Getter/Setter...
}

我可能遗漏了一些东西。 “不可修改”是什么意思?你不能修改对象或类?

答案 1 :(得分:0)

自定义mixin怎么样?

@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++);
相关问题