读书人

JAXB学习札记(二)

发布时间: 2012-10-07 17:28:51 作者: rapoo

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;}@Overridepublic 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中的对象 */@Overridepublic Date unmarshal(String paramValueType) throws Exception {return format.parse(paramValueType);}/** * 将bean中的对象转换为xml字符串 */@Overridepublic 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]

?这下大家满意了吧

?

读书人网 >编程

热点推荐