`

XStream Converter Date

    博客分类:
  • java
 
阅读更多
类如下:

public class bookinfo implements 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”这样的日期格式,只能自定义一个转换器

public class DateConverter  implements Converter {

 @Override
 public boolean canConvert(Class arg0) {

  return Date.class == arg0;
 }
 @Override
 public void 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) {
                throw new 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。

对象的转换器如下:

public class LongConverter  implements Converter {

 @Override
 public boolean canConvert(Class arg0) {

  return Long.class == arg0;
 }
 @Override
 public void 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());
分享到:
评论

相关推荐

    XStream的Date转换 @XStreamConverter DateConverter

    标题提到的“XStream的Date转换 @XStreamConverter DateConverter”主要涉及两个核心概念:XStream的转换器(Converter)和`@XStreamConverter`注解。转换器是XStream的核心机制之一,它负责将Java对象转化为XML元素...

    使用XStream操作xml教程

    import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import ...

    XStream使用例子

    return type.equals(Date.class); } // 实现read和write方法... } ``` 然后注册这个转换器: ```java xstream.registerConverter(new CustomDateConverter()); ``` **6. 性能优化** 对于大量数据操作,性能...

    xstream资料

    XStream提供了自动类型转换机制,允许对象中的简单类型(如Integer、Date等)直接转换为对应的XML表示。对于复杂类型,可以通过注册转换器(Converter)进行定制化处理。 **五、安全与序列化策略** 在处理不受信任...

    XStream简单应用实例

    通过实现`com.thoughtworks.xstream.converters.Converter`接口,我们可以创建自己的转换器。例如,为日期对象创建转换器: ```java import java.text.SimpleDateFormat; import java.util.Date; import ...

    使用XStream是实现XML与Java对象的转换(4)--转换器

    要创建一个自定义转换器,你需要继承XStream的Converter或HierarchicalStreamConverter接口,并实现其必要的方法。例如,如果你有一个Date类型的字段,想要将其以自定义格式输出,你可以创建一个LocalConverter并...

    xml和实体对象相互转换 一步到位

    Xstream内建了大量常见的Java类型转换器,如String、Integer、Date等,并且允许开发者自定义转换器以处理特殊类型的数据。 使用Xstream进行XML和对象转换的步骤大致如下: 1. 引入依赖:首先在项目中引入Xstream库...

    spring-framework-reference4.1.4

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    spring-framework-reference-4.1.2

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

Global site tag (gtag.js) - Google Analytics