JAXB - 如何在没有标题的情况下编组java对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAXB - 如何在没有标题的情况下编组java对象相关的知识,希望对你有一定的参考价值。

我正在尝试编组一个java对象,但我想删除Jaxb引入的头文件。

宾语:

@XmlRootElement
public class FormElement implements Serializable {
    private String id;
    private String name;
    private Integer order;
}

预期产量:

<element>
    <id>asd</id>
    <name>asd</name>
    <order>1</order>
</element>

我的输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<formElement>
  <id>asd</id>
  <name>asd</name>
  <order>1</order>
</formElement>

我的元帅方法:

public String marshal() {
        JAXBContext context;
        try {
            context = JAXBContext.newInstance(FormElement.class);
            Marshaller marshaller = context.createMarshaller();
            StringWriter stringWriter = new StringWriter();
            marshaller.marshal(this, stringWriter);
            return stringWriter.toString();
        } catch (JAXBException e) {
        }
        return null;
    }

我该如何删除它?

提前致谢。

答案

我用它解决了

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

并将(name = "element")添加到@XmlRootElement注释中。

正确的方法:

public String marshal() {
    JAXBContext context;
    try {
        context = JAXBContext.newInstance(FormElement.class);
        Marshaller marshaller = context.createMarshaller();
        StringWriter stringWriter = new StringWriter();
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
        marshaller.marshal(this, stringWriter);
        return stringWriter.toString();
    } catch (JAXBException e) {
        String mess = "Error marshalling FormElement " + e.getMessage()
                + (e.getCause() != null ? ". " + e.getCause() : " ");
        System.out.println(mess);
    }
    return null;
}

并正确的注释:

@XmlRootElement(name = "element")

以上是关于JAXB - 如何在没有标题的情况下编组java对象的主要内容,如果未能解决你的问题,请参考以下文章

带有 java.lang.Object 字段的 JAXB 编组对象

在 JaxB 编组没有 @XmlRootElement 注释的元素时删除 ns2 前缀

如何将 JAXB 对象编组到 org.w3c.dom.Document?

编组时出现 JAXB 错误

JAXB 继承,解组到编组类的子类

如何在使用 jaxb 进行编组时删除额外的转义字符