JSON序列化Redis读取出错问题解决方案

作者:贾树丙 时间:2022-10-13 18:57:50 

报错

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 1, fastjson-version 1.2.44

问题分析

在写入缓存的时候,hash结构,它的value值,在写入前使用JSON 序列化了,JSON.toJSONString(value)

在取缓存的时候把一个Collection 作为对象序列化了,并不是把List 序列化,所以在反序列化的时候不能用List 来解析

// 读取缓存返回String
BoundHashOperations<String, String, String> hash = this.template.boundHashOps(key);
Collection list = hash.entries().values();
return JSON.toJSONString(list);

// 将String 解析成 List
String tmp = redisService.listHashObject(BOOK_CATALOG);
return JSON.parseArray(tmp, BookCatalog.class);

问题出在这里了,把Collection 转成List 出错 ,首先强转是不行的

解决

// 读取缓存直接返回 Collection
BoundHashOperations<String, String, String> hash = this.template.boundHashOps(key);
return hash.entries().values();

// 将Collection 转成List,不能直接转成对象,需要先转换成String ,再将单个String 反序列化成对象
java.util.Collection tmp = redisService.listHashObject(BOOK_CATALOG);
List<String> list = new ArrayList<>(tmp);
List<BookCatalog> ans = new ArrayList<>(list.size());
for (String item : list) {
BookCatalog book = JSON.parseObject(item, BookCatalog.class);
ans.add(book);
}

//可以再排个序,本身的hash 结构是无序的 ans.sort(Comparator.comparing(BookCatalog::getCode));

return ans;

来源:https://www.cnblogs.com/acm-bingzi/p/redis_fastjson.html

标签:JSON,序列化,Redis,读取
0
投稿

猜你喜欢

  • C# 指针内存控制Marshal内存数据存储原理分析

    2021-09-22 04:05:00
  • Android MaterialAlertDialogBuilder修改按钮属性

    2021-12-20 06:56:19
  • Android开发从相机或相册获取图片裁剪

    2022-11-09 01:52:17
  • Android编程中自定义dialog用法实例

    2023-05-10 07:21:37
  • Java中ArrayList和SubList的坑面试题

    2023-09-21 06:56:21
  • SpringBoot jackson提供对LocalDate的支持方式

    2022-01-06 00:06:51
  • Android4.2中全屏或者取消标题栏的方法总结

    2023-06-14 16:17:06
  • C# 对象持久化详解

    2023-06-24 10:21:47
  • Java实现数据连接池Druid举例

    2022-12-10 21:21:47
  • C#实现组合排列的方法

    2021-10-04 02:25:01
  • C#动态编译并执行字符串样例

    2022-02-10 22:26:53
  • 浅谈Android Studio如何Debug对应so文件C/C++代码

    2023-11-20 03:23:35
  • Spring Boot项目添加外部Jar包以及配置多数据源的完整步骤

    2023-10-12 13:20:39
  • Toast类避免显示时间叠加的方法

    2021-08-20 02:01:42
  • flutter 怎么实现app整体灰色效果

    2023-01-24 21:23:22
  • spring cloud升级到spring boot 2.x/Finchley.RELEASE遇到的坑

    2022-01-04 20:40:56
  • java身份证合法性校验工具类实例代码

    2022-09-10 18:36:55
  • Java开发中synchronized的定义及用法详解

    2021-11-11 07:01:20
  • Java入门绊脚石之Override和Overload的区别详解

    2022-05-04 15:24:51
  • 解析如何在android中增加gsensor驱动(MMA7660)

    2023-05-22 22:03:24
  • asp之家 软件编程 m.aspxhome.com