JABX简介
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。
JDK中JAXB相关的重要Class和Interface:
JDK中JAXB相关的重要Annotation:
@XmlType 定义映射的一些相关规则
参数:
propOrder 指定映射XML时的节点顺序
factoryClass 指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身
factoryMethod 指定工厂类的工厂方法
name 定义XML Schema中type的名称
namespace 指定Schema中的命名空间
@XmlAccessorType 定义映射这个类中的何种类型需要映射到XML。可接收四个参数,分别是:
XmlAccessType.FIELD:映射这个类中的所有字段到XML
XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
XmlAccessType.NONE:不映射
@XmlAccessorOrder用于对java对象生成的xml元素进行排序。它有两个属性值:
XmlAccessorOrder.ALPHABETICAL:对生成的xml元素按字母顺序排序;
XmlAccessorOrder.UNDEFINED:不排序。
@XmlJavaTypeAdapter常用在转换比较复杂的对象时,如map类型或者格式化日期等。使用此注解时,需要自己写一个adapter类继承XmlAdapter抽象类,并实现里面的方法。@XmlJavaTypeAdapter(value=xxx.class),value为自己定义的adapter类
XmlAdapter如下:
@XmlElementWrapper注解表示生成一个包装 XML 表示形式的包装器元素。 此元素主要用于生成一个包装集合的包装器 XML 元素。
@XmlElementWrapper 为数组元素或集合元素定义一个父节点。如,类中有一元素为List items,若不加此注解,该元素将被映射为
<items>...</items>
<items>...</items>
这种形式,此注解可将这个元素进行包装,如:
@XmlElementWrapper(name="items")
@XmlElement(name="item")
public List items;
将会生成这样的XML样式:
<items>
<item>...</item>
<item>...</item>
</items>
@XmlRootElement 将一个Java类映射为一段XML的根节点
参数:
name 定义这个根节点的名称
namespace 定义这个根节点命名空间
@XmlElement 指定一个字段或get/set方法映射到XML的节点。如,当一个类的XmlAccessorType 被标注为PROPERTY时,在某一个没有get/set方法的字段上标注此注解,即可将该字段映射到XML。
参数:
defaultValue 指定节点默认值
name 指定节点名称
namespace 指定节点命名空间
required 是否必须(默认为false)
nillable 该字段是否包含 nillable="true" 属性(默认为false)
type 定义该字段或属性的关联类型
@XmlAttribute 指定一个字段或get/set方法映射到XML的属性。
参数:
name 指定属性名称
namespace 指定属性命名空间
required 是否必须(默认为false)
JavaBean
package cn.yunyichina.front.business.his.register.payRegister.vo;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import cn.yunyichina.front.business.common.util.ShenzhenXmlUtils;
/**
* @author Yifeng_classmate
* @create 2018年6月26日
* @description
*/
@XmlRootElement(name = "Request")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class PayRegisterToHis {
private String transCode;
private String date;
private String patientID;
private String cardTypeID;
private String cardNo;
private String password;
private String regFlow;
private String doctorID;
private String userId;
private String psOrdNum;
private String agtOrdNum;
private String isInsurance;
private String payMode;
private String insuredType;
private String patientType;
private String clinicCode;
private String paytime;
private String fromType;
private SITransInfo sITransInfo;
private List<Item> itemList;
public String getFromType() {
return fromType;
}
@XmlElement(name = "FromType")
public void setFromType(String fromType) {
this.fromType = fromType;
}
public String getTransCode() {
return transCode;
}
@XmlElement(name = "TransCode")
public void setTransCode(String transCode) {
this.transCode = transCode;
}
public String getDate() {
return date;
}
@XmlElement(name = "Date")
public void setDate(String date) {
this.date = date;
}
public String getPatientID() {
return patientID;
}
@XmlElement(name = "PatientID")
public void setPatientID(String patientID) {
this.patientID = patientID;
}
public String getCardTypeID() {
return cardTypeID;
}
@XmlElement(name = "CardTypeID")
public void setCardTypeID(String cardTypeID) {
this.cardTypeID = cardTypeID;
}
public String getCardNo() {
return cardNo;
}
@XmlElement(name = "CardNo")
public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}
public String getPassword() {
return password;
}
@XmlElement(name = "Password")
public void setPassword(String password) {
this.password = password;
}
public String getRegFlow() {
return regFlow;
}
@XmlElement(name = "RegFlow")
public void setRegFlow(String regFlow) {
this.regFlow = regFlow;
}
public String getDoctorID() {
return doctorID;
}
@XmlElement(name = "DoctorID")
public void setDoctorID(String doctorID) {
this.doctorID = doctorID;
}
public String getUserId() {
return userId;
}
@XmlElement(name = "UserId")
public void setUserId(String userId) {
this.userId = userId;
}
public String getPsOrdNum() {
return psOrdNum;
}
@XmlElement(name = "psOrdNum")
public void setPsOrdNum(String psOrdNum) {
this.psOrdNum = psOrdNum;
}
public String getAgtOrdNum() {
return agtOrdNum;
}
@XmlElement(name = "agtOrdNum")
public void setAgtOrdNum(String agtOrdNum) {
this.agtOrdNum = agtOrdNum;
}
public String getIsInsurance() {
return isInsurance;
}
@XmlElement(name = "isInsurance")
public void setIsInsurance(String isInsurance) {
this.isInsurance = isInsurance;
}
public String getPayMode() {
return payMode;
}
@XmlElement(name = "payMode")
public void setPayMode(String payMode) {
this.payMode = payMode;
}
public String getInsuredType() {
return insuredType;
}
@XmlElement(name = "insuredType")
public void setInsuredType(String insuredType) {
this.insuredType = insuredType;
}
public String getPatientType() {
return patientType;
}
@XmlElement(name = "patientType")
public void setPatientType(String patientType) {
this.patientType = patientType;
}
public String getClinicCode() {
return clinicCode;
}
@XmlElement(name = "clinicCode")
public void setClinicCode(String clinicCode) {
this.clinicCode = clinicCode;
}
public String getPaytime() {
return paytime;
}
@XmlElement(name = "paytime")
public void setPaytime(String paytime) {
this.paytime = paytime;
}
public SITransInfo getsITransInfo() {
return sITransInfo;
}
@XmlElement(name = "SITransInfo")
public void setsITransInfo(SITransInfo sITransInfo) {
this.sITransInfo = sITransInfo;
}
public List<Item> getItemList() {
return itemList;
}
@XmlElementWrapper(name = "List")
@XmlElement(name = "Item")
public void setItemList(List<Item> itemList) {
this.itemList = itemList;
}
public static class SITransInfo {
private String sIPatientInfo;
private String sIInputInfo;
private String sIOutput;
public String getsIPatientInfo() {
return sIPatientInfo;
}
@XmlElement(name = "SIPatientInfo")
public void setsIPatientInfo(String sIPatientInfo) {
this.sIPatientInfo = sIPatientInfo;
}
public String getsIInputInfo() {
return sIInputInfo;
}
@XmlElement(name = "SIInputInfo")
public void setsIInputInfo(String sIInputInfo) {
this.sIInputInfo = sIInputInfo;
}
public String getsIOutput() {
return sIOutput;
}
@XmlElement(name = "SIOutput")
public void setsIOutput(String sIOutput) {
this.sIOutput = sIOutput;
}
}
@XmlRootElement(name = "Item")
public static class Item {
private String payTypeID;
private String payModeName;
private String openBank;
private String openAccount;
private String posTransNo;
private String amount;
public String getPayTypeID() {
return payTypeID;
}
@XmlElement(name = "PayTypeID")
public void setPayTypeID(String payTypeID) {
this.payTypeID = payTypeID;
}
public String getPayModeName() {
return payModeName;
}
@XmlElement(name = "PayModeName")
public void setPayModeName(String payModeName) {
this.payModeName = payModeName;
}
public String getOpenBank() {
return openBank;
}
@XmlElement(name = "OpenBank")
public void setOpenBank(String openBank) {
this.openBank = openBank;
}
public String getOpenAccount() {
return openAccount;
}
@XmlElement(name = "OpenAccount")
public void setOpenAccount(String openAccount) {
this.openAccount = openAccount;
}
public String getPosTransNo() {
return posTransNo;
}
@XmlElement(name = "POSTransNo")
public void setPosTransNo(String posTransNo) {
this.posTransNo = posTransNo;
}
public String getAmount() {
return amount;
}
@XmlElement(name = "Amount")
public void setAmount(String amount) {
this.amount = amount;
}
}
输出:
<Request>
<TransCode/>
<Date>2018-04-10</Date>
<PatientID>0000004275</PatientID>
<CardTypeID>5</CardTypeID>
<CardNo>0000004275</CardNo>
<Password/>
<RegFlow>590</RegFlow>
<DoctorID>000534</DoctorID>
<UserId/>
<psOrdNum>YRP20180410105720000A01</psOrdNum>
<agtOrdNum>20180410105720000A01</agtOrdNum>
<isInsurance>0</isInsurance>
<payMode>1</payMode>
<insuredType>1</insuredType>
<patientType>1</patientType>
<clinicCode>111463173</clinicCode>
<paytime>2018-04-10 11:18:53</paytime>
<FromType>4</FromType>
<SITransInfo>
<SIPatientInfo/>
<SIInputInfo/>
<SIOutput/>
</SITransInfo>
<List>
<Item>
<PayTypeID>0</PayTypeID>
<PayModeName/>
<OpenBank/>
<OpenAccount/>
<POSTransNo/>
<Amount>3300</Amount>
</Item>
</List>
</Request>