阿里巴巴fastjson版本从1.2.72升级到2.0.14。开启autoType,不支持Object对象接收强转成Java对象的解决方案。

本文介绍了如何在Redis中存储和获取Java对象,并通过两种方式实现序列化与反序列化:直接强转及先转为JSON对象再进行转换。展示了具体的代码示例及可能遇到的类型转换异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方案一:Object对象接收强转成Java对象,需要先转成JSON对象,再转换成Java对象。 


    @Autowired
    public RedisTemplate redisTemplate;
    
    @Test
    public void fastJson(){
        /*
         * redis 数据:
         * {"@type":"xx.xx.GoodsDetailDTO","goodsName":"HK GOLD香港黄金","goodsPrice":100.00}
         * 
         * 错误信息:
         * java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to xx.xx.GoodsDetailDTO
         */

        //@Version 1.2.72
        GoodsDetailDTO goodsDetail;
        //Object对象
        Object object = this.getCacheObject(GoodsKeyConstant.GOODS_DETAIL_KEY + 1L);
        if (Objects.nonNull(object)) {
            //Object对象强转成Java对象
            goodsDetail = (GoodsDetailDTO) object;
            log.info("商品信息:{}", JSONObject.toJSONString(goodsDetail));
        }

        //@Version 2.0.14
        //先转成JSON对象
        JSONObject jsonObject = this.getCacheObject(GoodsKeyConstant.GOODS_DETAIL_KEY + 1L);
        //JSON对象转换成Java对象
        GoodsDetailDTO goodsDetailDTO = jsonObject.toJavaObject(GoodsDetailDTO.class);
        log.info("商品信息:{}", JSONObject.toJSONString(goodsDetailDTO));
    }

    private  <T> T getCacheObject(String key) {
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
        return operation.get(key);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值