XStream的日期转换XStreamDateConverter
来源:互联网 发布:白马非马 知乎 编辑:程序博客网 时间:2024/05/10 04:07
1.如果Date类型是元素,可参考http://huyumin.iteye.com/blog/2072675实现;
publicclass bookinfoimplements java.io.Serializable
{
private Long id;
//Fields
private java.lang.Long bsno;
private java.lang.String bookname;
private java.lang.String isbn;
private java.lang.String booktype;
private java.lang.String author;
private java.util.Date publishdate;
private java.lang.Long quantityperpackage;
private java.lang.Long height;
}
在bookinfo中的publishdate是一个date对象,在用XStream做转换的时,由于XStream自带的DateConverter 不能转换形如“2010-10-07”这样的日期格式,只能自定义一个转换器
publicclass DateConverter implements Converter {
@Override
publicboolean canConvert(Class arg0) {
return Date.class == arg0;
}
@Override
publicvoid marshal(Object arg0, HierarchicalStreamWriter arg1,
MarshallingContext arg2) {
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext arg1) {
GregorianCalendar calendar = new GregorianCalendar();
SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd");//格式化当前系统日期
try {
calendar.setTime(dateFm.parse(reader.getValue()));
} catch (ParseException e) {
thrownew ConversionException(e.getMessage(), e);
}
return calendar.getTime();
}
}
最后在程序中注册构造的转换器。。。。
XStream xstream = new XStream(new DomDriver());
xstream.registerConverter(new DateConverter());
同样的,在从XML向java对象转换时,如果Long对应的是空字符串,Xstream也会报错,例如,XML文件中如果quantityperpackage的值为空,则转换为Long时会报错,则,同样的编写转换器,在转换器中判断,如果XML中对应的为空,则让Long等于null。
对象的转换器如下:
publicclass LongConverter implements Converter {
@Override
publicboolean canConvert(Class arg0) {
return Long.class == arg0;
}
@Override
publicvoid marshal(Object arg0, HierarchicalStreamWriter arg1,
MarshallingContext arg2) {
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext arg1) {
Long longnum = new Long("1");
System.out.println(reader.getValue());
if("".equals(reader.getValue()))
{
System.out.println("long is null");
longnum = null;
return longnum;
}
else{
longnum = longnum.valueOf(reader.getValue());
System.out.println("long is not null");
return longnum;
}
}
}
同样在程序中注册构造的转换器。。。。
XStream xstream = new XStream(new DomDriver());
xstream.registerConverter(new LongConverter());
2.如果Date类型是属性,则要构造实现SingleValueConverter的转换类,方法如下:
public class XStreamDateConverter implements SingleValueConverter {@Overridepublic boolean canConvert(Class arg0) {return Date.class == arg0;}@Overridepublic Object fromString(String arg0) {try {return DateUtil.parse(arg0, "yyyy-MM-dd");} catch (ParseException e) {e.printStackTrace();}return null;}@Overridepublic String toString(Object arg0) {return DateUtil.getDateStrByPattern((Date) arg0, "yyyy-MM-dd");} }
在需要转换的Date属性上添加注解如下:
@XStreamConverter(value=XStreamDateConverter.class)@XStreamAsAttributeprivate Date startTime;@XStreamConverter(value=XStreamDateConverter.class)@XStreamAsAttributeprivate Date endTime;
最后注册这个Converter就可以了
String xml = "";XStream f = new XStream(new DomDriver()); f.registerConverter(new XStreamDateConverter()); f.autodetectAnnotations(true);f.fromXML(xml);
- XStream的日期转换XStreamDateConverter
- XStream日期转换,注解转换
- XStream对象组合的转换
- XStream 对xml的转换
- XStream 对象和XML转换的神器
- xStream完美转换XML、JSON /XStream Xml与JavaBean对象的互转经典【转载】
- xStream转换XML、JSON
- 使用XStream转换xml
- xStream转换XML、JSON
- xStream转换XML
- XStream转换xml
- 使用XStream进行POJO和xml之间的转换
- 使用XStream进行POJO和xml之间的转换
- 使用XStream进行POJO和xml之间的转换
- xstream:实现JavaBean与XML/JSON的相互转换
- android 中XML和对象转换利器Xstream的使用
- 使用XStream, 对于java object与xml之间的转换
- android 中XML和对象转换利器Xstream的使用
- ajax同步异步请求与JSON数据解析
- python爬虫新闻的学习笔记
- shiro 多realm
- 高德百度坐标系转换方法
- vboxclient the virtualbox kernel service is not running.Exiting.解决办法
- XStream的日期转换XStreamDateConverter
- 操作系统与网络实现 之二十(甲)
- 程序员必读书单 1.0 ----转自Lucida
- 快速理解RequireJs
- 游戏与常用的五大算法---下篇
- KeSetSystemAffinityThread
- tensorflow学习笔记(三十一):构建多GPU代码
- 搭建fastdfs文件系统
- 牛顿法和拟牛顿法相关