JAXB 实现java对象与xml之间互相转换
来源:互联网 发布:java对象转json 编辑:程序博客网 时间:2024/04/30 18:34
利用Marshaller和unMarshaller可在java的object对象和xml之间实现转换
首先创建一个简单的Boy对象
- @XmlRootElement(name="Root")
- @XmlAccessorType(XmlAccessType.PROPERTY)
- public class Boy {
- private String name = "aa";
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
@XmlRootElement(name="Root")@XmlAccessorType(XmlAccessType.PROPERTY)public class Boy {private String name = "aa";public String getName() {return name;}public void setName(String name) {this.name = name;}}
其中@XmlRootElement(name="Root")表明xml的根元素,(name="Root")这个是重新定义xml文件的跟元素,如果没有此name定义,则xml根元素默认跟对象名一致
然后通过Marshaller类实现将对象转换为xml,同时也可利用Unmarshaller类进行xml和类之间的转换
- public class JAXBTest {
- public static void main(String[] args) throws JAXBException {
- JAXBContext context = JAXBContext.newInstance(Boy.class);
- Marshaller marshaller = context.createMarshaller();
- Unmarshaller unMarshaller = context.createUnmarshaller();
- System.out.println("----------marshaller--------------");
- Boy boy = new Boy();
- marshaller.marshal(boy, System.out);
- System.out.println("\n----------unMarshaller--------------");
- //将xml转换为对应的java对象
- String xml = "<Root><name>aa</name></Root>";//此处标签名称须和boy对象的属性一致
- Boy b = (Boy) unMarshaller.unmarshal(new StringReader(xml));
- System.out.println(b.getName());
- }
- }
public class JAXBTest {public static void main(String[] args) throws JAXBException {JAXBContext context = JAXBContext.newInstance(Boy.class);Marshaller marshaller = context.createMarshaller();Unmarshaller unMarshaller = context.createUnmarshaller();System.out.println("----------marshaller--------------");Boy boy = new Boy();marshaller.marshal(boy, System.out);System.out.println("\n----------unMarshaller--------------");//将xml转换为对应的java对象String xml = "<Root><name>aa</name></Root>";//此处标签名称须和boy对象的属性一致Boy b = (Boy) unMarshaller.unmarshal(new StringReader(xml));System.out.println(b.getName());}}最后转换打印结果
----------marshaller--------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Root><name>aa</name></Root>
----------unMarshaller--------------
aa
上面介绍的对象boy中只包含简单属性,如果boy中还包含其他对象该做如何处理呢?
- @XmlRootElement(name="Root")
- @XmlAccessorType(XmlAccessType.PROPERTY)
- public class Boy {
- private String name = "aa";
- private Address address;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @XmlJavaTypeAdapter(AddressAdapter.class)
- public Address getAddress() {
- return address;
- }
- public void setAddress(Address address) {
- this.address = address;
- }
- }
@XmlRootElement(name="Root")@XmlAccessorType(XmlAccessType.PROPERTY)public class Boy {private String name = "aa";private Address address;public String getName() {return name;}public void setName(String name) {this.name = name;}@XmlJavaTypeAdapter(AddressAdapter.class)public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}}
- public class Address {
- private String address;
- public void setAddress(String address) {
- this.address = address;
- }
- public String getAddress() {
- return address;
- }
- }
public class Address {private String address;public void setAddress(String address) {this.address = address;}public String getAddress() {return address;}}
此时的boy对象中包含了Address对象,所以此时boy对象中的getAddress()须设置adapter,
创建AddressAdapter类,继承XmlAdapter<ValueType,BoundType>
- public class AddressAdapter extends XmlAdapter<String, Address> {
- @Override
- public Address unmarshal(String v) throws Exception {
- AddressImpl address = new AddressImpl();
- address.setAddress(v);
- return address;
- }
- @Override
- public String marshal(Address v) throws Exception {
- return v.getAddress();
- }
- }
public class AddressAdapter extends XmlAdapter<String, Address> {@Overridepublic Address unmarshal(String v) throws Exception {AddressImpl address = new AddressImpl();address.setAddress(v);return address;}@Overridepublic String marshal(Address v) throws Exception {return v.getAddress();}}
此时即可进行java对象转换为xml
- public class JAXBTest {
- public static void main(String[] args) throws JAXBException {
- JAXBContext context = JAXBContext.newInstance(Boy.class);
- Marshaller marshaller = context.createMarshaller();
- System.out.println("----------marshaller--------------");
- Boy boy = new Boy();
- AddressImpl address = new AddressImpl();
- address.setAddress("BeiJing");
- boy.setAddress(address);
- marshaller.marshal(boy, System.out);
- }
- }
public class JAXBTest {public static void main(String[] args) throws JAXBException {JAXBContext context = JAXBContext.newInstance(Boy.class);Marshaller marshaller = context.createMarshaller();System.out.println("----------marshaller--------------");Boy boy = new Boy();AddressImpl address = new AddressImpl();address.setAddress("BeiJing");boy.setAddress(address);marshaller.marshal(boy, System.out);}}
最后打印结果为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Root><address>BeiJing</address><name>aa</name></Root>
- JAXB 实现java对象与xml之间互相转换(一)
- JAXB 实现java对象与xml之间互相转换(二)
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- Jaxb实现Java对象与XML之间的转换
- JAXB实现JAVA对象和XML字符串的互相转换
- java 中jaxb实现对象到xml互相转换
- JAXB实现JavaBean与XML互相转换
- xml-xml与java对象之间的转换(jaxb)
- JAXB 对象与XML之间转换
- java对象和xml之间转换--Jaxb
- JAXB实现JAVA BEAN与XML之间的转换
- Mpeg AAC
- MFC窗口各控件的颜色和字体的设置
- 勤奋小孩的遗言:没有理由不坚持
- 软件随想录(local.joelonsoftware.com/wiki)-2002年11月11日 抽象渗漏法则 - The Law of Leaky Abstractions
- 09年生日送我的煎蛋超级技术
- JAXB 实现java对象与xml之间互相转换
- 消除Eclipse对javascript校验的error误报及warning符号
- 响应式的前端框架 - Groundwork
- Rigidbody.AddExplosionForce 添加爆炸力
- 分享一个 数据库代码编辑软件的源代码
- java操作(DOM、SAX、JDOM、DOM4J)xml方式的四种比较与详解
- 文章标题 : [分享]CH340/CH341,USB转串口驱动模块
- Python ConfigParser
- ※开发工具※=>☆VS2005☆=>※№统一管理头文件路径和编译宏