java实体类转json_含有泛型的JSON反序列化

我所在公司使用的是,spring boot + mybatis plus组合开发服务器端,在开发中也会使用到Redis作为缓存,通常的做法是,把从MySQL中查出来的Java对象序列化成字符串,然后存在Redis中,要用的时候再从Redis中取出来,然后然序列化成Java对象。

但是有一次我在缓存分页数据的时候发现一个问题

这是我模仿mybatis plus的Page自定义的一个page

@Data

在定义一个实体类

@Data

然后重现我之前的问题

@Test

4252a972fe66610be89cdfc1cc232ece.png
序列化结果,没有问题

1220392e34817c00e99bc40e033a3d95.png
反序列化结果,你会发现records里面是JSONObject,不是我们想要的User类型。

如果这个数据是直接返回给前端的话,是没有问题的,因为在json里面就只有数组和对象两种,具体是什么类型的对象他不关心。但是这个结果入股还需要在Java中继续使用的话,那就需要注意了,你期待的是一个Java实体类对象,然而实际上是一个json对象。

那我们想要用Java实体类对象怎么办呢?

这里我使用的是Alibaba的fastJSON,Google的gson也可以实现。

Page<User> res = JSONObject.parseObject(str, new TypeReference<Page<User>>() {});

ff8d0ddf31b6fc3ca75b397b142f2d54.png
这里可以看到records里面就是user类型了。
alibaba/fastjson​github.com
6618e2d1f62cd5940f24c8785ea22e16.png

这里有讲这个typeReference的具体用法。

当然Gson里面也有类似的TypeToken,也可以实现这个需求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值