关于带@XmlRootElement注解的Point类生成对应XML的方法咨询
如何让你的Point类生成指定XML结构
当然可以生成你想要的XML啦!不过你当前的Point类还需要做几处小调整,因为JAXB(Java Architecture for XML Binding)有几个必要的要求:
- 必须要有无参构造器:JAXB在序列化对象时需要默认的无参构造方法来实例化类
- 成员变量需要提供公共的getter方法:JAXB需要通过getter访问属性值来生成对应的XML元素
修改后的Point类代码
import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Point { private int x; private int y; // 必须的无参构造器 public Point() {} // 你原来的带参构造器保留 public Point(int _x, int _y) { x = _x; y = _y; } // 公共getter方法 public int getX() { return x; } public int getY() { return y; } // 可选:如果需要支持修改属性,可以加上setter,不过序列化只需要getter public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } }
生成目标XML的代码示例
接下来你可以用JAXB的API来生成指定格式的XML,下面是一个简单的测试代码:
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; public class XmlGenerator { public static void main(String[] args) { try { // 创建Point对象 Point point = new Point(3, 5); // 初始化JAXBContext JAXBContext context = JAXBContext.newInstance(Point.class); // 创建Marshaller实例,用于序列化对象到XML Marshaller marshaller = context.createMarshaller(); // 设置格式化输出,让XML有缩进,和你要的格式一致 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 把对象序列化为XML,这里输出到控制台,也可以输出到文件 marshaller.marshal(point, System.out); } catch (JAXBException e) { e.printStackTrace(); } } }
输出效果
运行上面的代码后,控制台会输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <point> <x>3</x> <y>5</y> </point>
这和你想要的XML结构完全一致,只是多了XML声明(如果不需要的话,也可以通过Marshaller的属性去掉,不过通常XML声明是推荐保留的)。
内容的提问来源于stack exchange,提问作者Romeo Velloni
相关产品推荐
相关产品推荐

