fastjson JSON.toJavaObject() 如何自定义反序列化实现?

lsmd5eda  于 2021-11-27  发布在  Java
关注(0)|答案(1)|浏览(351)
public class Order {

    private Timestamp time;

    public static void main(String[] args) {
        SqlDateDeserializer deserializer = new SqlDateDeserializer(true){
            @Override
            protected <T> T cast(DefaultJSONParser parser, Type clazz, Object fieldName, Object val) {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                try {
                    Date date = simpleDateFormat.parse(String.valueOf(val));
                    Timestamp timestamp = new Timestamp(date.getTime());
                    return (T) timestamp;
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                return super.cast(parser, clazz, fieldName, val);
            }
        };
        ParserConfig.getGlobalInstance().putDeserializer(Timestamp.class, deserializer);
        String tempData = "{\"time\":\"20200326121212\"}";
        //Order(time=2020-03-26 12:12:12.0)
        System.out.println(JSON.parseObject(tempData, Order.class)); 
        //Order(time=2610-02-15 09:42:01.212)   
        System.out.println(JSON.toJavaObject(JSON.parseObject(tempData), Order.class)); 
    }
}

代码如上,使用JSON.parseObject()解析字符串为对象时,会使用注册的Timestamp反序列化转换器。但是JSON.toJavaObject()不会使用这个转换器。

除了在转换的字段上使用 @field()注解来指定反序列化类之外,是否有其他方法来配置全局的反序列化类。(如果类的字段较多,@field的写法会很麻烦)

0aydgbwb

0aydgbwb1#

遇到同样问题, 不知道你现在是否已经有方案解决?

相关问题