XStream 实例

本文介绍如何创建并使用XStreamTools类进行XML数据的序列化和反序列化操作,详细阐述XStream在处理对象到XML转换过程中的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建XStreamTools类


public class XStreamTools {
 public static String toXml2(Object obj, Converter converter){
        //
        XStream xstream = new XStream(
                new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));
        xstream.registerConverter(converter);
        xstream.processAnnotations(obj.getClass()); //通过注解方式的,一定要有这句话
        xstream.setMode(XStream.NO_REFERENCES);
        ////如果没有这句,xml中的根元素会是<包.类名>;或者说:注解根本就没生效,所以的元素名就是类的属性
//		xstream.processAnnotations(obj.getClass()); //通过注解方式的,一定要有这句话
        String xmlString = xstream.toXML(obj);
        return xmlString;
    }
/**
	 *  将传入xml文本转换成Java对象
	 * @Title: toBean 
	 * @author liuman 
	 * @param xmlStr
	 * @param cls  xml对应的class类
	 * @return T   xml对应的class类的实例对象
	 * 
	 * 调用的方法实例:PersonBean person=XmlUtil.toBean(xmlStr, PersonBean.class);
	 */
	public static <T> T  toBean(String xmlStr,Class<T> cls){
		//注意:不是new Xstream(); 否则报错:java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserFactory
		XStream xstream=new XStream(new DomDriver());
//		XStream xstream = new XStream(
//				new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));
		xstream.processAnnotations(cls);
		T obj=(T)xstream.fromXML(xmlStr);
		return obj;			
	}
}

2.创建 DateConverter.class


public class DateConverter implements Converter {
    private final String dateformatter;

    /**
     * 默认转换格式
     *
     */
    public DateConverter() {
        super();
        this.dateformatter = "yyyy-MM-dd HH:mm:ss";
    }

    /**
     * 指定特定格式的日期
     *
     * @param dateformatter
     */
    public DateConverter(String dateformatter) {
        super();
        this.dateformatter = dateformatter;
    }

    @Override
    public boolean canConvert(Class clazz) {
        return Date.class.isAssignableFrom(clazz);
    }

    @Override
    public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
        Date date = (Date) value;
        writer.setValue(format(this.dateformatter, date));
    }

    @Override
    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
        try {
            return parse(this.dateformatter, reader.getValue());
        } catch (ParseException e) {
            throw new ConversionException(e.getMessage(), e);
        }
    }

    /**
     * 日期格式化
     *
     * @see 2013-5-17下午7:36:19
     * @param pattern
     * @param date
     * @return
     */
    public static String format(String pattern, Date date) {
        if (date == null) {
            return "";
        } else {
            return new SimpleDateFormat(pattern).format(date);
        }
    }

    /**
     * 日期格式化
     *
     * @see 2013-5-17下午7:36:19
     * @param pattern
     * @param text
     * @return
     */
    public static Date parse(String pattern, String text) throws ParseException {
        //如果xml中为空,返回null
        if("".equals(text) || (text == null)) {
            return null;
        }
        SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
        return dateFormat.parse(text);
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值