XStream自定义转换器很简单,主要用于满足一些个性化的需要,如从xml文件给JavaBean赋值时候时间字段值为"",这时候默认的转换器报错了,需要自定义一个转换器。
参考了博文:
http://www.jiucool.com/blog/xstream-custom-type-converter-converter/
XML文件如下:
<Fault> <faultId>1</faultId> <deviceId>10023</deviceId> <deviceModel>10023</deviceModel> <processStat>1</processStat> <faultDesc>电视机坏</faultDesc> <process>进行更换</process> <timeoutReason>超时原因</timeoutReason> <timeout>1.25</timeout> <protime>1.24</protime> <faulttime></faulttime> <closetime>2014-03-04 </closetime> </Fault>
faulttime是java.util.Date类型,如果没有值就返回NULL,转换器如下:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import com.thoughtworks.xstream.converters.ConversionException; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; public class MyDateConverter implements Converter { private String dateformatter= "yyyy-MM-dd HH:mm:ss"; /** * 默认转换格式 * * @author jiucool.com */ public MyDateConverter() { super(); this.dateformatter = "yyyy-MM-dd HH:mm:ss"; } public MyDateConverter(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) { try { return parse("yyyy-MM-dd", reader.getValue()); } catch (ParseException e1) { e1.printStackTrace(); } throw new ConversionException(e.getMessage(), e); } } public static String format(String pattern, Date date) { if (date == null) { return ""; } else { return new SimpleDateFormat(pattern).format(date); } } public static Date parse(String pattern, String text) throws ParseException { if(text==null||"".equals(text.trim())||"null".equals(text.trim().toLowerCase())) { return null; } SimpleDateFormat dateFormat = new SimpleDateFormat(pattern); return dateFormat.parse(text); } }
使用方法为:
XStream xstream2 = new XStream(new DomDriver()); xstream2.registerConverter(new MyDateConverter()); xstream2.alias("Fault",Fault.class); Fault fault2=(Fault) xstream2.fromXML(new File("f:/saveFile/tmp/fault2.xml")); System.out.println(fault2);
全文完。
相关推荐
"Xstream register 转换器"这个主题主要涉及到如何自定义转换器来处理特定类型的对象,以便更好地控制XML的输出格式或者解决某些复杂类型的序列化问题。在这篇博客文章中(虽然链接未提供具体内容),作者可能详细...
要创建一个自定义转换器,你需要继承XStream的Converter或HierarchicalStreamConverter接口,并实现其必要的方法。例如,如果你有一个Date类型的字段,想要将其以自定义格式输出,你可以创建一个LocalConverter并...
在Java开发中,数据序列化和反序列化是常见的需求,XStream库提供了一个方便的解决方案。XStream是一个用于XML、JSON和HTML的Java库,它能够将...这种自定义转换器的方法在处理复杂或有特殊需求的数据类型时非常有用。
通过别名、忽略字段、自定义转换器和注解等工具,我们可以精确地控制XML的生成,满足各种复杂的需求。在实际项目中,结合XStream的强大功能,可以提高代码的可读性和可维护性,提升开发效率。 本文仅对XStream的...
XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类...同时,也支持用户自定义的类型转换器。
通过使用自定义的转换器,你可以控制这个过程,以便处理特定类型的对象或者自定义XML格式。 ### 使用Xstream的基本步骤 1. **引入依赖**:首先,你需要在项目中引入Xstream的库。如果你使用的是Maven,可以在pom....
XStream 提供了自定义转换器的机制,以处理特殊类型的对象或特定的序列化需求。你可以创建一个实现了 `com.thoughtworks.xstream.converters.Converter` 接口的类,并注册到 XStream 实例中。 2. **域类别名** ...
2. **灵活性**: 它支持各种自定义转换器,可以处理复杂的对象结构和自定义类型。 3. **性能**: 相比于其他序列化库,XStream在某些场景下表现出较高的性能。 4. **安全性**: 提供了安全模式,防止潜在的跨站脚本...
通过使用注解或自定义转换器,我们可以控制XML的结构和Java对象的映射关系。XStream的优点在于它能自动处理基本数据类型、集合和自定义类的转换,使得XML序列化和反序列化变得极其简单。 要实现"springMVC整合...
接口来创建自定义转换器,并注册到XStream实例中。 总的来说,XStream是一个强大且灵活的工具,用于在Java对象和XML之间进行数据交换。它简化了序列化和反序列化过程,使得在各种场景下处理XML数据变得更加方便。...
XStream 是一个强大的 Java 库,它允许程序员将 Java 对象序列化为 XML,反之...在阅读“xstream学习文档”时,建议重点理解其核心概念、使用示例以及自定义转换器的编写,以便在实际工作中游刃有余地应对各种需求。
3. **配置xStream**:可以使用`xstream.alias()`或`xstream.registerConverter()`等方法来设置别名或注册自定义转换器。 4. **对象到XML**:使用`xstream.toXML(object)`方法将Java对象转换为XML字符串。 5. **XML...
四、类型转换与自定义转换器 XStream支持自定义类型转换器,当处理特定复杂类型的对象时非常有用。通过实现`com.thoughtworks.xstream.converters.Converter`接口并注册到XStream实例中,可以控制对象到XML的转换...
例如,XStream提供了内置的转换器处理基本类型、集合、日期等,同时也支持用户自定义转换器以处理特定的复杂对象。 XStream-1.3.1版本是一个相对早期的稳定版本,它包含了对JDK1.4及以上的支持,同时提供了许多增强...
- **自定义转换器**:对于复杂的对象结构或者有特殊需求的字段,XStream支持自定义转换器。你可以定义如何将特定类型的对象转换为XML,以及如何从XML还原它们。 - **安全与序列化策略**:XStream的安全性是个重要...
3. 注册这个转换器并进行转换: ```java xstream.registerConverter(new JsonStringConverter()); String json = xstream.toXML(person, new JsonWriter()); Person parsedPerson = (Person) xstream.fromXML(json)...
5. **自定义转换器**: 用户可以创建自己的转换器,处理特定类型的对象,增强灵活性。 ### 示例代码 ```java import com.thoughtworks.xstream.XStream; public class XStreamDemo { public static void main...
2. **自定义转换器**:XStream 允许用户自定义转换器,以处理特定类型的对象,比如日期、时间或者自定义复杂的对象结构。 3. **自动引用处理**:XStream 可以自动跟踪和处理对象之间的引用关系,确保在序列化和反...
对于复杂的 XML 结构,如具有相同名称的子节点以及带有属性的节点,XStream 提供了自定义转换器的功能。在上述的描述中,`Params` 节点下有两个同名子节点 `Param`,并且每个 `Param` 节点都有 `Name` 和 `Value` ...