使用 XStream 在 JavaBean 与 XML/JSON 之间相互转换
2009-09-23 00:00:00 来源:WEB开发网3. XML -> JavaBean
01.public static void main(String[] args) {
02.
03. XStream xstream = new XStream(new DomDriver());
04.
05. //设置了这个别名才能识别下面 xml 中的 product 节点,否则要用类全限名称
06. xstream.alias("product", Product.class);
07. String xml = "<product><prodId>1001</prodId><prodName>电脑" +
08. "</prodName><prodPrice>4000.0</prodPrice></product>";
09. Product prod = (Product)xstream.fromXML(xml);
10. System.out.println(prod.getProdName());
11.}
执行上面的程序,能够输出产品名称“电脑”来,说明,由 XML 描述创建对象是成功的。相对于生成 XML 用的是 toXML(),通过 XML 构建对象用的方法是 fromXML(),同样要留意它的其他重载方法:
Object fromXML(InputStream input);
Object fromXML(InputStream xml, Object root);
Object fromXML(Reader xml);
Object fromXML(Reader xml, Object root);
Object fromXML(String xml);
Object fromXML(String xml, Object root);
它们能从不同的输入源,可指定根节点来构建对象。
4. JSON -> JavaBean
01.public static void main(String[] args) {
02. // 这里不能用 JsonHierarchicalStreamDriver 了,它只能用于 JavaBean->JSON
03. XStream xstream = new XStream(new JettisonMappedXmlDriver());
04.
05. // 设置了这个别名才能识别下面 xml 中的 product 节点,否则要用类全限名称
06. xstream.alias("product", Product.class);
07. String json = "{product:{prodId: 1001,prodName: '电脑', prodPrice: 4000.0}}";
08. Product prod = (Product) xstream.fromXML(json);
09. System.out.println(prod.getProdName());
10.}
可以看到也输出了“电脑”,说明工作正常。注意这里只能用 JettisonMappedXmlDriver。
相比于 JavaBean 到 XML/JSON 的转换,下面两个例子要简单多了,JavaBean 未涉及到关联关系。复杂的 XStream 也做得到,就看前两个例子,XStream 能够把复杂的 JavaBean 生成 XML/JSON,它也有这个能耐把生成的东西还原回去的。而且 XStream 在由 XML/JSON 生成 JavaBean 时不依赖于 setter 方法和构造方法的。
我们在实际中使用 XStream 时应该还会对它进行细究,或作进一步的扩展,如把某个 JavaBean 属性生成 XML 时作为另一属性生成的 XML 节点的属性,而不是子节点;或加入自己的 Converter、甚至是自己的 DomDriver、JsonDriver 等等。
更多精彩
赞助商链接