把一段 JSON 字符串还原成一个实体对象

这三行代码的作用是:
把一段 JSON 字符串还原成一个 Shop 实体对象,但中间经过了一层自定义的包装类型 RedisData
逐行拆开讲你就明白了。


  1. RedisData redisData = JSONUtil.toBean(shopJson, RedisData.class);
    1.1 JSONUtil.toBean(...) 是 Hutool 提供的 JSON→对象工具。
    1.2 它把字符串 shopJson 整体反序列化成 RedisData 类型的对象。
    1.3 RedisData 一般是咱们项目里自己写的类,长这样(简化版):
public class RedisData {
    private Object data;   // 真正业务数据(这里存的是 Shop)
    private Long expireTime; // 逻辑过期时间,可选
    // getter/setter …
}

此时 redisData.getData() 拿到的是 Object 类型,实际上里面是一个 JSONObject


  1. JSONObject data = (JSONObject) redisData.getData();
    2.1 把 Object 强转成 Hutool 的 JSONObject,方便下一步再解析。
    2.2 为什么能强转?
    因为序列化时就是把 Shop 先转成 JSONObject 再塞进 RedisData,所以反序列化后这里一定是 JSONObject 实例。

  1. Shop shop = JSONUtil.toBean(data, Shop.class);
    3.1 再把 JSONObject 二次解析成真正的业务实体 Shop
    3.2 完成后 shop 就是一个完整的 Shop 对象,可以正常用它做后续业务逻辑。

一张图看懂流程:

shopJson(String)
     │
     ▼
RedisData(外壳)
     │
     ▼
JSONObject(内胆)
     │
     ▼
Shop(真实业务对象)

常见坑提醒

  • 如果 redisData.getData() 实际不是 JSONObject(比如是字符串或数组),强转会抛 ClassCastException
  • 建议加一行非空判断:
if (redisData == null || redisData.getData() == null) {
    return null;
}

一句话总结
“拆两层包装”:先把 JSON 字符串还原成带过期时间的 RedisData,再把里面的数据二次解析成最终要用的 Shop 对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值