25

您好我需要使用 Jackson-dataformat XMLMapper 从 JAVA 创建一个 XML。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>

但我总是喜欢额外的“<addresses> < /addresses>”标签。

<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 但它无济于事。蒂亚!!

4

3 回答 3

56

试试下面的代码

@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 
}
于 2014-11-26T08:43:10.283 回答
5

如果您不想在代码中的任何地方处理注释,则此设置会更改默认包装行为。

XmlMapper mapper = new XmlMapper();
mapper.setDefaultUseWrapper(false);
于 2017-09-09T20:21:41.127 回答
3

只是为了添加到 ManojP 的答案中,如果@JacksonXmlElementWrapper(useWrapping = false)在变量的声明中添加不起作用(对我来说就是这种情况),那么将其添加到 getter 方法就可以了。

于 2016-10-03T00:15:55.670 回答