Сериализация Java List в XML с использованием Jackson XML mapper

Привет, мне нужно создать XML из JAVA, используя Jackson-dataformat XMLMapper. XML должен быть как

<Customer>
  <id>1</id>
  <name>Mighty Pulpo</name>
    <addresses>
      <city>austin</city>
      <state>TX</state>
    </addresses>
    <addresses>
      <city>Hong Kong</city>
      <state>Hong Kong</state>
    </addresses>
</Customer>

Но я всегда получаю, как с дополнительным тегом

.

<Customer>
  <id>1</id>
  <name>Mighty Pulpo</name>
<addresses>
    <addresses>
      <city>austin</city>
      <state>TX</state>
    </addresses>
    <addresses>
      <city>Hong Kong</city>
      <state>Hong Kong</state>
    </addresses>
<addresses>
</Customer>

Я использую приведенный ниже код для создания XML

JaxbAnnotationModule jaxbAnnotationModule = new JaxbAnnotationModule();
XmlMapper mapper = new XmlMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.registerModule(jaxbAnnotationModule);
mapper.registerModule(new GuavaModule());
String xml = mapper.writeValueAsString(customer);
System.out.println(xml);

Пожалуйста, кто-нибудь может мне помочь? Как я могу удалить дополнительный тег, пожалуйста. Я пытался использовать @XmlElement, но это не помогает. TIA!!

3 ответа

Решение

Попробуйте код ниже

@JacksonXmlRootElement(localName = "customer") 
class Customer {

    @JacksonXmlProperty(localName = "id")
    private int id;
    @JacksonXmlProperty(localName = "name")
    private String  name;

    @JacksonXmlProperty(localName = "addresses")
    @JacksonXmlElementWrapper(useWrapping = false)
    private Address[] address;

    //getters, setters, toString
}

class Address {

    @JacksonXmlProperty(localName = "city")
    private String city;

    @JacksonXmlProperty(localName = "state")
    private String state;
    // getter/setter 
}

Этот параметр изменяет поведение переноса по умолчанию, если вы не хотите иметь дело с аннотацией везде в вашем коде.

XmlMapper mapper = new XmlMapper();
mapper.setDefaultUseWrapper(false);

Просто, чтобы добавить к ответу ManojP, если добавление @JacksonXmlElementWrapper(useWrapping = false) на объявление вашей переменной не работает (что было для меня), добавление его в метод getter добьется цели.

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