tem*_*elm 6 java xml jaxb marshalling unmarshalling
我知道JAXB API的基础知识,但我遇到了一些我想做的事情,我不确定它是否真的可行.详情如下:
我有一个名为Book的类,其中包含2个String类型的公共实例变量:
@XmlRootElement(name="book")
public class Book
{
public String title;
public String author;
public Book() {
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个名为另一个类书店与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<>();
}
}
Run Code Online (Sandbox Code Playgroud)
注意:删除包声明和导入以节省空间.
这两个类工作,我得到的输出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>
Run Code Online (Sandbox Code Playgroud)
据我所知,实例变量需要声明为public才能使其类具有可序列性.或者,实例变量可以声明为私有,但在这种情况下需要访问器和更改器.
我不喜欢声明实例变量public; 我喜欢使用访问器和变换器.即便如此,我希望我的一些字段是只读的,即没有变异器.但是JAXB似乎需要为每个要编组/解组的字段配置访问器和更改器.我想知道这有什么办法吗?
在任何情况下,您都应该将字段保密.您有两个绑定到字段的选项
1)使用XmlElement或XmlAttribute批注对您的字段进行批注
@XmlRootElement(name="book")
public class Book {
@XmlElement
private String title;
...
Run Code Online (Sandbox Code Playgroud)
2)使用@XmlAccessorType(XmlAccessType.FIELD)注释您的类
@XmlRootElement(name="book")
@XmlAccessorType(XmlAccessType.FIELD)
public class Book {
private String title;
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7102 次 |
最近记录: |