JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式。
Jaxb处理java对象和xml之间转换经常使用的annotation有:
@XmlType
@XmlElement
@XmlRootElement
@XmlAttribute
@XmlAccessorType
@XmlAccessorOrder
@XmlTransient
@XmlJavaTypeAdapter
- @XmlType,将Java类或枚举类型映射到XML模式类型
- @XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动- 绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。
- @XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。
- @XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
- @XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。
- @XmlRootElement,将Java类或枚举类型映射到XML元素。
- @XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。
- @XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。
@XmlElement将Java对象的属性映射为xml的节点,在使用@XmlElement时,可经过name属性改变java对象属性在xml中显示的名称。如:java
@XmlElement(name=“Address”)
private String yourAddress;
@XmlRootElement用于类级别的注解,对应xml的跟元素,常与 @XmlType 和 @XmlAccessorType一块儿使用。如:this
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Address {}s
@XmlAttribute用于把java对象的属性映射为xml的属性,并可经过name属性为生成的xml属性指定别名。如:.net
@XmlAttribute(name=“Country”)
private String state;
@XmlAccessorOrder用于对java对象生成的xml元素进行排序。它有两个属性值:
AccessorOrder.ALPHABETICAL:对生成的xml元素按字母书序排序
XmlAccessOrder.UNDEFINED:不排序
@XmlTransient用于标示在由java对象映射xml时,忽略此属性。即,在生成的xml文件中不出现此元素。
@XmlJavaTypeAdapter经常使用在转换比较复杂的对象时,如map类型或者格式化日期等。使用此注解时,须要本身写一个adapter类继承XmlAdapter抽象类,并实现里面的方法。
使用案例:
javax.xml.bind
jaxb-api
2.1
方式一
@XmlRootElement(name = "item")
public class item {
private String id;
private String Area_Id;
private String Area_Desc;
private String Parent_Id;
private String TreeLevel;
public String getId() {
return id;
}
@XmlAttribute(name = "id")
public void setId(String id) {
this.id = id;
}
public String getArea_Id() {
return Area_Id;
}
@XmlElement(name = "Area_Id")
public void setArea_Id(String area_Id) {
Area_Id = area_Id;
}
@XmlElement(name = "Area_Desc")
public String getArea_Desc() {
return Area_Desc;
}
public void setArea_Desc(String area_Desc) {
Area_Desc = area_Desc;
}
@XmlElement(name = "Parent_Id")
public String getParent_Id() {
return Parent_Id;
}
public void setParent_Id(String parent_Id) {
Parent_Id = parent_Id;
}
public String getTreeLevel() {
return TreeLevel;
}
@XmlElement(name = "TreeLevel")
public void setTreeLevel(String treeLevel) {
TreeLevel = treeLevel;
}
}
@XmlRootElement(name = "MESSAGE")
@XmlAccessorType(XmlAccessType.FIELD)
public class MESSAGE {
private String Verison;
private HEADER HEADER;
private ParamList ParamList;
public String getVerison() {
return Verison;
}
@XmlAttribute(name = "Verison")
public void setVerison(String verison) {
Verison = verison;
}
public HEADER getHEADER() {
return HEADER;
}
public void setHEADER(HEADER HEADER) {
this.HEADER = HEADER;
}
public ParamList getParamList() {
return ParamList;
}
@XmlElement(name = "ParamList")
public void setParamList(ParamList paramList) {
ParamList = paramList;
}
}
public class ParamList {
private List- item;
public List
- getItem() {
return item;
}
public void setItem(List
- item) {
this.item = item;
}
}
使用MESSAGE对象去接收XML报文
@PostMapping("/queryMESSAGE")
public MESSAGE queryMESSAGE(@RequestBody MESSAGE message) {
return message;
}
方式二
@XmlRootElement(name = "spaceMESSAGE")
public class ResponseXmlData {
private ParamList paramList;
public ParamList getParamList() {
return paramList;
}
@XmlElement(name = "spaceParamList")
public void setParamList(ParamList paramList) {
this.paramList = paramList;
}
public static class ParamList{
private List- item;
public List
- getItem() {
return item;
}
@XmlElement(name = "item")
public void setItem(List
- item) {
this.item = item;
}
public static class item {
private String Area_Id;
private String Area_Desc;
private String Parent_Id;
private int TreeLevel;
private int id;
public int getId() {
return id;
}
@XmlAttribute(name = "id")
public void setId(int id) {
this.id = id;
}
public String getArea_Id() {
return Area_Id;
}
@XmlElement(name = "Area_Id")
public void setArea_Id(String area_Id) {
Area_Id = area_Id;
}
public String getParent_Id() {
return Parent_Id;
}
@XmlElement(name = "Parent_Id")
public void setParent_Id(String parent_Id) {
Parent_Id = parent_Id;
}
public String getArea_Desc() {
return Area_Desc;
}
@XmlElement(name = "Area_Desc")
public void setArea_Desc(String area_Desc) {
Area_Desc = area_Desc;
}
public int getTreeLevel() {
return TreeLevel;
}
@XmlElement(name = "TreeLevel")
public void setTreeLevel(int treeLevel) {
TreeLevel = treeLevel;
}
}
}
}
使用ResponseXmlData对象去接收XML报文
@PostMapping("/queryResponseXmlData")
public ResponseXmlData queryResponseXmlData(@RequestBody ResponseXmlData responseXmlData) {
return responseXmlData;
}



