`
kamuikyo
  • 浏览: 28253 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

JAXB学习笔记(二)

阅读更多

上个例子中人说Date类型序列化出的字符串不好看啊,那我们来处理一下;

需要使用注释 @XmlJavaTypeAdapter ,并且创造一个转换类

 

package cn.uyunsky.blog.xml.demo2;

import java.io.StringReader;
import java.io.StringWriter;
import java.util.Date;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

/**
 * <p>看个类型转换</p>
 */
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Persion {

	private Integer userid;
	private String username;
	
	@XmlJavaTypeAdapter(value = DateXmlAdapter.class)
	private Date birthday;

	public Integer getUserid() {
		return userid;
	}

	public void setUserid(Integer userid) {
		this.userid = userid;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}
	
	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("Persion [userid=");
		builder.append(userid);
		builder.append(", username=");
		builder.append(username);
		builder.append(", birthday=");
		builder.append(birthday);
		builder.append("]");
		return builder.toString();
	}

	public static void main(String[] args) {
		try {
			JAXBContext jaxbContext = JAXBContext.newInstance(Persion.class);
			Persion persion = new Persion();
			
			persion.setUserid(112);
			persion.setUsername("就不告诉你");
			persion.setBirthday(new Date());
			
			Marshaller marshaller = jaxbContext.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			
			StringWriter writer = new StringWriter();
			marshaller.marshal(persion, writer);
			String xml = writer.getBuffer().toString();
			System.out.println(xml);
			
			
			Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
			Object bean = unmarshaller.unmarshal(new StringReader(xml));
			System.out.println(bean);
			
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}

}

 

转换类

 

package cn.uyunsky.blog.xml.demo2;

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

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

/**
 *  <p>日期转换类,注意看XmlAdapter源码,使用泛型很方便,否则代码中需要Object的强制类型转换</p>
 * <pre>
public abstract class XmlAdapter<ValueType, BoundType>
{
  public abstract BoundType unmarshal(ValueType paramValueType)
    throws Exception;

  public abstract ValueType marshal(BoundType paramBoundType)
    throws Exception;
}
 * <pre>
 */
public class DateXmlAdapter extends XmlAdapter<String, Date> {
	
	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

	/**
	 * 将xml中的值转换为bean中的对象
	 */
	@Override
	public Date unmarshal(String paramValueType) throws Exception {
		return format.parse(paramValueType);
	}

	/**
	 * 将bean中的对象转换为xml字符串
	 */
	@Override
	public String marshal(Date paramBoundType) throws Exception {
		return format.format(paramBoundType);
	}

}

 

 输出结果

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persion>
    <userid>112</userid>
    <username>就不告诉你</username>
    <birthday>2011-09-28</birthday>
</persion>

Persion [userid=112, username=就不告诉你, birthday=Wed Sep 28 00:00:00 CST 2011]

 这下大家满意了吧

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics