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);
}
}