XStreamカスタム時間変換器(シンプル)
3832 ワード
XStreamカスタムコンバータは簡単で、xmlファイルからJavaBenに値を賦与する時の時間フィールドの値が「」というように、いくつかの個人化のニーズを満たすために主に使用されます。この場合、デフォルトの変換器はエラーとなり、カスタムの変換器が必要です。
ブログを参考にしました
http://www.jiucool.com/blog/xstream-custom-type-converter-converter/
XMLファイルは以下の通りです
faulttimeはjava.util.Dateタイプで、値がないとNULLに戻ります。変換器は以下の通りです。
使用方法は:
全文が終わる
ブログを参考にしました
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);
全文が終わる