fastjson版本:1.2.38,(Sep, 2017)
需求
有时候我们需要自定义反序列化,例如从服务器接收的字符串为秒,而fastjson需要的是毫秒。因此需要自定义反序列化。
问题提出
网上很多资料过于陈旧,如http://blog.csdn.net/donggua3694857/article/details/62064985中是自定义类继承:com.alibaba.fastjson.parser.deserializer.DateFormatDeserializer
,或者http://aboutcoder.com/2016/07/22/resolve-the-fastjson-problems-about-date/中是自定义类继承:com.alibaba.fastjson.parser.deserializer.DateDeserializer
。
但是在最新的fastjson库里(1.2.38, Sep, 2017)没有DateFormatDeserializer
类或者DateDeserializer
类。通过查看源代码,发现目前使用:com.alibaba.fastjson.serializer.DateCodec
。
问题解决
自定义类SecondDeserializer
继承DateCodec
,然后重写cast
方法,如下:
public class SecondDeserializer extends DateCodec {
public final static SecondDeserializer instance = new SecondDeserializer();
@Override
public <T> T cast(DefaultJSONParser parser, Type clazz, Object fieldName, Object val){
long value = Long.valueOf(String.valueOf(val)) * 1000;
return super.cast(parser, clazz, fieldName, value);
}
}
这样,当json传来是的秒,能够转化为java中的Date类。