默认情况下,JAXB(JSR-222)实现检查公共访问器方法。您可以在get / set方法中将
Book参数添加到
List。
public List<Book> getBookslst() { return bookslst;}public void setBookslst(List<Book> bookslst) { this.bookslst = bookslst;}
或者,您可以使用
@XmlElement注释指定属性的类型:
@XmlElement(type=Book.class)public List getBookslst() { return bookslst;}
您还可以指定JAXB实现对字段而不是属性进行内部检查:
@XmlRootElement(name="lists")@XmlAccessorType(XmlAccessType.FIELD)public class BookLists { List<Book> bookslst;}
更新
在Marshallar.Marshall中,有没有其他方法可以添加List而不是BookList?
您可以创建一个利用
@XmlAnyElement(lax=true)注释的通用List包装器对象(请参阅:http : //blog.bdoughan.com/2010/08/using-
xmlanyelement-to-build-generic.html)。然后它冷处理
List任何带有注释的内容
@XmlRootElement。
清单
package forum12323397;import java.util.ArrayList;import java.util.List;import javax.xml.bind.annotation.*;@XmlRootElementpublic class Lists<VALUE> { private List<VALUE> values = new ArrayList<VALUE>(); @XmlAnyElement(lax=true) public List<VALUE> getValues() { return values; }}
演示版
package forum12323397;import javax.xml.bind.*;public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Lists.class, Book.class); Lists<Book> lists = new Lists<Book>(); Book book1 = new Book(); book1.setTitle("A Book"); book1.setYear(2001); lists.getValues().add(book1); Book book2 = new Book(); book2.setTitle("Another Book"); book2.setYear(2007); lists.getValues().add(book2); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(lists, System.out); }}
输出量
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><lists> <book> <title>A Book</title> <year>2001</year> </book> <book> <title>Another Book</title> <year>2007</year> </book></lists>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)