`
wangzl2222
  • 浏览: 150943 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

XmlRootElement

    博客分类:
  • java
阅读更多

JAXB :  Java API for XML Binding

 

作用是 java对象 <---> xml文件   之间的转换

 

JAXB Annotation

@XmlRootElement   // xml 文件的根元素

@XmlElement

@XmlAccessorType  // 表明类内,什么样的成员 是 可以被xml 转化 传输的  可以是 FIELD PROPERTY ...

@XmlTransient

@XmlJavaTypeAdaptor

 

=========================================

 

下面是一个例子:

 

Boy.java

 

package jaxb;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessType;

@XmlRootElement // 必须要标明这个元素
@XmlAccessorType(XmlAccessType.FIELD)
public class Boy {   
    String name = "CY";
}

JAXBTest.java

 

package jaxb;

import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

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();
       
        Boy boy = new Boy();
        marshaller.marshal(boy, System.out);
        System.out.println();
       
        String xml = "<boy><name>David</name></boy>";
        Boy boy2 = (Boy) unmarshaller.unmarshal(new StringReader(xml));
        System.out.println(boy2.name);
    }
}

下面是运行结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><name>CY</name></boy>
David
先是marshall成 xml文件,

再是把 xml 文件 unmarshal 成 java object。

 

--------------------------------------------------

 

改动一:

@XmlAccessorType(XmlAccessType.FIELD)  --> @XmlAccessorType(XmlAccessType.PROPERTY)

意思是 只有 属性 才能被转换成 xml 中的标签。

所以再运行的结果是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy/>
CY

就是说 java object 转换成 xml 的时候,name 不是属性(因为没有 get set方法),所以name不转换成标签。

 

-----------------------------------------------------

 

改动二:

改动一 的基础上,给name属性添加 get set 方法。 再运行,结果为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><name>CY</name></boy>
David
由此 可见 @XmlAccessorType 这个annotation 的作用。

 

-----------------------------------------------------

 

改动三:

改动二 的基础上,给Boy 再添加一个field, int age=10, 即:

 

package jaxb;

import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessType;

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {   
    String name = "CY";
    int age = 10;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

 

显然,这个age 是不会被 转化 到xml 文件中的。解决办法是:

 

import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessType;

@XmlRootElement // bixude
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {
   
    String name = "CY";
    @XmlElement
    int age = 10;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

加上 @XmlElement annotation. 运行结果为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><age>10</age> <name>CY</name></boy>
David

 

--------------------------------------

 

对于根元素,可以设置属性:

@XmlRootElement(name="b" nameSpace="http://test")

这样,在生成的xml文件中,<boy> 标签 就会变为 <b> 标签。并且加上一个命名空间。

 

----------------------------------------

 

下面解释 @XmlJavaTypeAdaptor 的作用。

 

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {
   
    private String name = "CY";

 

    private Address address; // 是一个接口
   
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

 

在 java object 转换成 xml 的时候,接口Address 无法被转换。

所以 这里要加上 @XmlJavaTypeAdapter(AddressAdapter.class)

所以 要多写一个AddressAdaptor 类。

这个类会返回Address接口的一个具体实现类的对象。

 

这 就是 @XmlJavaTypeAdapter 的作用。

form:http://speed847.iteye.com/blog/454231

分享到:
评论

相关推荐

    JDK注解@XmlRootElement

    ### JDK注解@XmlRootElement详解 在Java开发过程中,XML数据的序列化与反序列化是一项常见任务。为了方便实现这一过程,Java提供了JAXB(Java Architecture for XML Binding)框架,而`@XmlRootElement`注解正是...

    XmlRootElement 定义bean自动生成xml

    当我们需要将Java对象转换为XML或从XML反序列化回Java对象时,`@XmlRootElement`注解起到了关键作用。这个注解是Java API for XML Processing (JAXB)的一部分,用于指定一个Java类作为XML文档的根元素。 `@...

    java生成指定格式的xml和解析对于的xml

    Java是一种广泛使用的编程语言,尤其在处理XML(可...通过DOM、SAX或StAX生成XML字符串,再利用JAXB结合`@XmlRootElement`注解解析XML并转换成Map。了解和掌握这些技术对于任何Java开发者在处理XML数据时都至关重要。

    jaxb for xjc 命令 实体类生成工具

    JAXB (Java Architecture for XML Binding) 是Java平台上的一项标准技术,用于将XML文档与Java对象进行绑定,使得XML数据能够方便地在Java程序中使用。XJC是JAXB的一部分,它是一个命令行工具,用于从XML Schema ...

    jaxb解析xml

    @XmlType 定义映射的一些规则,用在 class 类的注解,常与 @XmlRootElement,@XmlAccessorType 一起使用。 参数: * propOrder:指定映射 XML 时的节点顺序(常用)。 * factoryClass:指定 UnMarshal 时生成映射...

    JAXB Unmarshalling @XmlAnyElement

    在JAXB中,@XmlRootElement注解用于指定一个Java类映射为XML文档的根元素。@XmlAnyElement注解用于指示JAXB框架在序列化或反序列化过程中处理未映射到Java类的XML元素。 接下来,我们来分析一下具体的代码片段。...

    JaxbContext生成xml文件或java类对象转化注解

    在上面的例子中,我们使用 @XmlRootElement 注解来标注 People 类,然后使用 JAXBContext 将 People 对象转换为 XML,并将 XML 转换回 People 对象。 JAXB 提供了许多有用的功能,例如可以将 Java 对象与 XML 进行...

    jaxb.zip_jaxb

    在这个`Person`类中,`@XmlRootElement`标记类为XML文档的根元素,`@XmlElement`用于字段和属性,而`@XmlAttribute`则将字段映射到XML元素的属性。 ### 总结 JAXB是Java开发中处理XML的强大工具,通过`marshal`和`...

    使用@IdClass创建联合主键,并实现外部关联

    @XmlRootElement @Entity @Table(name = "datacenter") public class DataCenter { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long centerID; private String centerName; // getter ...

    JAXB-XML注解

    @XmlRootElement 注解用于类级别的注解,用于指定 Java 类对应的 XML 根元素。它通常与 @XmlType 和 @XmlAccessorType 一起使用。 例如: ```java @XmlType @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement...

    SpringBoot返回json和xml的示例代码

    2. 使用@XmlRootElement和@XmlElement等JAXB注解来注释数据模型类,以便能够正确地转换成XML格式。 ### 内容知识点解析 **新建一个springboot项目,加入依赖jackson-dataformat-xml**: 1. 使用Maven构建工具创建...

    [精品]JAVA6新特性介绍使用JAXB来实现对象与XML之间的映射.doc

    1. **注解驱动**:JAXB 2.0允许开发者使用注解来标记需要进行绑定的类和属性,如`@XmlRootElement`、`@XmlElement`、`@XmlAttribute`等,这使得代码更加简洁,无需编写大量的XML绑定文件。 2. **集成到JDK**:Java ...

    JAXB简易教程

    `@XmlRootElement`用于标记一个Java类,表示这个类可以被映射为XML的根元素;`@XmlElement`则用于标记类的属性,表示这些属性将映射为XML元素。 例如,有一个简单的`Person`类: ```java @XmlRootElement public ...

    JAXB学习笔记

    例如,在给出的代码片段中,`Persion`类就是一个被JAXB支持的类,它使用了`@XmlRootElement`注解来声明这个类对应于XML文档中的根元素,而`@XmlAccessorType(XmlAccessType.FIELD)`注解则表明所有字段(而非getter和...

    使用JAXB完成JAVAbean与xml互转

    首先,JAXB的核心组件包括`@XmlRootElement`、`@XmlElement`、`@XmlAttribute`等注解,它们用于标记Java类和类的属性,以便JAXB知道哪些部分应该映射到XML文档的元素和属性上。例如,如果我们有一个简单的`Person`类...

    JAXBContext测试Java对象与xml的相互转换Demo

    在这个例子中,`@XmlRootElement`注解标识`Person`类为XML文档的根元素,而`@XmlElement`注解则用于指定哪些属性对应于XML元素。 接下来,我们需要创建一个JAXBContext实例,这通常通过传递类的Class对象来完成。...

    通过JAXB实现完成java对象和xml的互相转换

    最常见的注解有`@XmlRootElement`,用于标记作为XML根元素的类;`@XmlElement`,用于将类的字段或方法映射到XML元素;以及`@XmlAttribute`,用于将字段或方法映射到XML属性。 例如,假设我们有一个简单的`Person`类...

    jaxb+list+实体,实现对xml读写

    `@XmlRootElement`注解表示这是一个可被JAXB处理的根元素,`@XmlElement`表示该字段应该作为XML元素进行序列化或反序列化: ```java @XmlRootElement(name = "student") public class Student { @XmlElement(name ...

    restful WebService的入门例子.pdf

    `@XmlRootElement`注解是Java JAXB(Java Architecture for XML Binding)库的一部分,它允许我们将这些对象序列化和反序列化为XML,这对于RESTful服务中的数据交换至关重要。例如,`Person`类的定义如下: ```java...

    jaxb与jpa初应用

    在上面的代码中,`@XmlRootElement`注解标记了类作为XML根元素,而属性上的`@XmlElement`注解则表示这些属性将被映射到XML元素。 接下来是JPA,它是Java EE规范的一部分,用于处理数据库操作。JPA提供了一种面向...

Global site tag (gtag.js) - Google Analytics