当前位置: 首页 > 面试题库 >

如何使用JAXB将Java对象与私有字段一起编组/解组

佘京
2023-03-14
问题内容

我知道JAXB API的基础知识,但是我坚持尝试做的事情,而且不确定是否确实可行。详细信息如下:

我有一个名为 Book 的类,带有2个类型为String的 公共 实例变量:

@XmlRootElement(name="book")
public class Book
{
    public String title;
    public String author;

    public Book() {
    }
}

我有一个名为 Bookshop 的其他类,带有1个ArrayList类型的 公共 实例变量:

@XmlRootElement(name="bookshop")
public class Bookshop
{
    @XmlElementWrapper(name="book_list")
    @XmlElement(name="book")
    public ArrayList<Book> bookList;

    public Bookshop() {
        this.bookList = new ArrayList<>();
    }
}

注意:为了节省空间,删除了软件包声明和导入。

这两个类正常工作,我得到的输出XML类似于:

<bookshop>
    <book_list>
        <book>
            <title>Book 1</title>
            <author>Author 1</author>
        </book>
        <book>
            <title>Book 2</title>
            <author>Author 2</author>
        </book>
    </book_list>
</bookshop>

据我所知,实例变量需要声明为public以便其类可序列化。或者,实例变量可以声明为私有,但是在这种情况下需要访问器和更改器。

我不喜欢将实例变量声明为公共变量;我喜欢使用访问器和更改器。即使那样,我也希望我的某些字段是只读的,即没有变量。但是JAXB似乎需要对要编组/解组的每个字段都使用访问器和更改器。我想知道是否有解决办法?


问题答案:

在任何情况下,您都应保持字段私有。您有2个绑定到字段的选项

1)使用XmlElement或XmlAttribute批注注释字段

@XmlRootElement(name="book")
public class Book {
    @XmlElement
    private String title;
    ...

2)使用@XmlAccessorType(XmlAccessType.FIELD)注释您的班级

    @XmlRootElement(name="book")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Book {
         private String title;
         ...


 类似资料:
  • 这似乎是一个基本问题,但我无法在其他地方找到答案。如果这是一个重复的帖子,请原谅。 是否可以对标记为@XmlAccessorType(XmlAccessType. FIELD)的类进行@XmlValue注释? 我正在尝试使用JAXB解析XML文件,虽然XML本身很大并且有其他字段,但问题特定于此字段: 映射为: 该字段在XML中声明为令牌类型。 @XmlValue注释给我一个IllegalAnno

  • 问题内容: 这给了我一个Document对象,它的顶层节点没有子节点: 这是变通方法,似乎效率更高,因为它先转换为String,然后转换为Document。 是否有可能完成我要完成的工作? 问题答案: 你在做什么应该工作。这是一个例子: 领域模型(Foo) 演示版 输出量

  • 我试图将我下面的xml转换为java对象。 这是我的xml: 我需要在"提供者组织"下获取"name"的值。下面是我Java课。 诊所ocument.java 记录目标。JAVA 病人ole.java 供应商组织。JAVA XMLFileParserSAXUtility.java 我得到的结果是 如果我尝试打印syso(临床文件); 结果是临床文档[recordTarget=null] 请帮帮我!

  • 错误中的SOAP WSDL URL是Spring Boot应用程序中的另一个web服务。试图理解为什么这会出现在错误中。 UnmarshalException:意外元素(URI:“”,local:“message”)。需要的元素是<{http://soap_wsdl_url}jaxb_pojo_name>

  • 是否可以对用@XmlElementRef注释的引用对象使用@XmlValue注释?目标是生成以下XML输出: 给定以下示例,JAXBContext初始化抛出NPE:at com . sun . XML . bind . v2 . runtime . property . property factory . create(property factory . Java:128) Foo类 酒吧类