jaxb小实例+注解说明

Customer.java
package org.jaxb.model;

import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessOrder;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorOrder;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlList;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/*XmlRootElement中的那么属性作用为:
 * 
 * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
	<c>
	    <id>1</id>
	    <username>张三</username>
	    <password>123</password>
	    <email>zhangsan@126.com</email>
	</c>
 * 
 *    若果不写则默认为 customer
 * */

@XmlRootElement()
//访问的方式 field:java对象中的所有成员变量
//PROPERTY:java对象中所有通过getter/setter方式访问的成员变量
//.PUBLIC_MEMBER:java对象中所有的public访问权限的成员变量和通过getter/setter方式访问的成员变量
//NONE:java类中属性不作为
@XmlAccessorType(XmlAccessType.FIELD)
//生成的按字母顺序排序
//XmlAccessOrder.UNDEFINED 不排序
@XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)
//这个与<span style="font-family: Arial, Helvetica, sans-serif;">XmlAccessorOrder结合使用</span>

@XmlType(name="cus", propOrder={
		"id","username" ,"email","bornDate"
})
public class Customer {

	/*
	 * name 的作用为:
	 * <customer>
     *    <标示>1</标示>
     * </customer>
     * 缺省则表示为属性的名称
     * <id>1<id>
	 */
//	@XmlElement(name="标示")
	
	/*
	 * <customer id="1">
		    <username>张三</username>
		    <password>123</password>
		    <email>zhangsan@qq.com zhangsan@126.com</email>
		</customer>
	 * */
	//@XmlAttribute
	private int id ;
	private String username ;
	@XmlTransient
	private String password ;
	/*
	 * <customer>
	    <标示>1</标示>
	    <username>张三</username>
	    <password>123</password>
	    <emails>
	        <emailAddress>zhangsan@qq.com</emailAddress>
	        <emailAddress>zhangsan@126.com</emailAddress>
	    </emails>
	   </customer>
	   
	 *  @XmlElementWrapper 在email外在包一层。
	 *  
	 * */
//	@XmlElementWrapper(name="emails")
//	@XmlElement(name="emailAddress")
	
	/*
	 * <email>zhangsan@qq.com zhangsan@126.com</email>
	 * @XmlList 作用就是把List类型在同一行输出,用空格隔开
	 * 
	 * */
	@XmlList
	private List<String> email ;
	
	@XmlJavaTypeAdapter(DataAdapter.class)
	private Date bornDate ;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	
	public void setPassword(String password) {
		this.password = password;
	}
	
	public List<String> getEmail() {
		return email;
	}
	public void setEmail(List<String> email) {
		this.email = email;
	}
	public Date getBornDate() {
		return bornDate;
	}
	public void setBornDate(Date bornDate) {
		this.bornDate = bornDate;
	}
	
	
}

DataAdapter.class
package org.jaxb.model;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class DataAdapter extends XmlAdapter<String, Date> {

	private String pattern = "yyyy-MM-dd" ;
	SimpleDateFormat sdf = new SimpleDateFormat(pattern);
	
	@Override
	public Date unmarshal(String v) throws Exception {
		
		return sdf.parse(v);
	}

	@Override
	public String marshal(Date v) throws Exception {
		return sdf.format(v);
	}

}
 
测试类
package org.jaxb.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class TestJaxb {

	public static void main(String[] args) {
		try {
			JAXBContext context = JAXBContext.newInstance(Customer.class);
			Customer customer = new Customer() ;
			customer.setId(1);
			customer.setUsername("张三");
			customer.setPassword("123");
			List<String> emails = new ArrayList<String>();
			emails.add("zhangsan@qq.com");
			emails.add("zhangsan@126.com");
			customer.setEmail(emails);
			customer.setBornDate(new Date());
			Marshaller marshaller= context.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			marshaller.marshal(customer, System.out);
		
		} catch (JAXBException e) {
			e.printStackTrace();
		}
		
	}
}
运行的结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer>
    <id>1</id>
    <username>张三</username>
    <email>zhangsan@qq.com zhangsan@126.com</email>
    <bornDate>2014-07-25</bornDate>
</customer>



总结:  
@XmlRootElement:定义xml根元
@XmlAccessorType:访问类型,四中,上面说明了
@XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)两种方式说明xml中出现的次序
@XmlType 与@XmlAccessorOrder结合使用,也能起到排序作用,propOrder必须全部的列出,否则会报错
@XmlElement:定义xml元素
@XmlAttribute:定义xml的属性
@XmlTransient :定义不出选在xml中的属性
@XmlJavaTypeAdapter(DataAdapter.class):复杂类型的适配器
@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值