我有一个可能包含空列表的对象。如果列表为空,则我不希望该标签出现在XML的String
输出中。
但是,JAXB仍在输出空标记。
我在RemoteEdition.java
类中的字段:
@XmlElementWrapper(name = "dealings")
@XmlElement(name = "dealing")
private List<Dealing> dealings;
dealings
为空列表时所需的输出:
<remoteEdition>
</remoteEdition>
实际输出:
<remoteEdition>
<dealings/>
</remoteEdition>
在杰克逊中,我将用以下元素注释该元素:
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<Dealing> dealings;
JAXB中是否有等效项?我在网络上找不到任何示例... P.s.我已经尝试过this solution,但没有用。
答案 0 :(得分:1)
实现此目标的一种方法是利用beforeMarshal
方法。仅当列表dealings
为空但不为null时,才创建此空元素。
因此,如果列表为空,则可以在null
方法中将字段设置为beforeMarshal
。
这是一个自包含的示例:
@XmlRootElement
class Root {
@XmlElementWrapper(name = "wrapper")
@XmlElement
private List<Element> element;
void beforeMarshal(Marshaller u) {
if (element != null && element.isEmpty()) {
element = null;
}
}
}
class Element {
}
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(Root.class);
StringWriter writer = new StringWriter();
Root jaxbElement = new Root();
jaxbElement.element = new ArrayList<JaxbNullElementWrapper.Element>();
context.createMarshaller().marshal(jaxbElement, writer);
System.out.println(writer.toString());
}
输出:<?xml version="1.0" encoding="UTF-8" standalone="yes"?><root/>