JAXB 深入显出 - JAXB 教程 注解

x33g5p2x  于2021-12-28 转载在 其他  
字(1.5k)|赞(0)|评价(0)|浏览(272)

摘要: JAXB 作为JDK的一部分,能便捷地将Java对象与XML进行相互转换,本教程从实际案例出发来讲解JAXB 2 的那些事儿。完整版目录

@XmlRootElement

类级别的注解。将类映射为xml全局元素,也就是根元素。如果要使用 JAXB ,则该注解必不可少。

@XmlRootElement
public class Student {
    private String name;
    ...
}

生成的XML如下:

<student>
    <name>Tom</name>
    ...
</student>
参数 name

name属性用于指定生成元素的名字,若不指定,默认使用类名小写作为元素名。

@XmlRootElement(name = "MyStudent")
public class Student {
    private String name;
    ...
}

生成的XML如下:

<MyStudent>
    <name>Tom</name>
    ...
</MyStudent>
参数 namespace

namespace属性用于指定生成的元素所属的命名空间。

@XmlType

参数 name

定义XML Schema中type的名称

参数 namespace

指定Schema中的命名空间

参数 propOrder

指定映射XML时的节点顺序

参数 factoryClass

指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身

参数 factoryMethod

指定工厂类的工厂方法

@XmlAccessorType

类级别的注解。定义这个类中的何种类型需要映射到XML。

参数 value

参数 value 可以接受4个指定值:

  • XmlAccessType.FIELD:映射这个类中的所有字段到XML
  • XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
  • XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
  • XmlAccessType.NONE:不映射
@XmlAccessorOrder

@XmlElement

字段,方法,参数级别的注解。该注解可以将被注解的(非静态)字段,或者被注解的get/set方法对应的字段映射为本地元素,也就是子元素。

参数 name

用于指定映射时的节点名称,指定生成元素的名字,若不指定,默认使用方法名小写作为元素名。

参数 namespace

指定映射时的节点命名空间

参数 required

字段是否必须,默认为false

参数 nillable

是否处理空数据,默认为false

参数 type

定义该字段或属性的关联类型

@XmlAttribute

参数 name

用于指定映射时的节点属性名称,若不指定,默认使用方法名小写作为元素名。

参数 namespace

指定映射时的节点属性命名空间

参数 required

该属性是否必须,默认为false

@XmlTransient

定义某一字段或属性不需要被映射。

@XmlElementWrapper

数组元素或集合元素定义一个父节点。

@XmlJavaTypeAdapter

自定义某一字段或属性映射到XML的适配器。

常见忽视点

一般不要把成员变量声明为public。可能会抛出异常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException

List元素需要使用@XmlElementWrapper,负责外围解析可能不正常。

相关文章