zoukankan      html  css  js  c++  java
  • Redis读取出错,JSON序列化的问题

    报错

      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;

    原创文章,欢迎转载,转载请注明出处!

  • 相关阅读:
    ACM_“IP地址”普及(进制转换)
    goj 堆箱子咯(栈)
    ACM_夏天到了,又到了出游的季节
    ACM_迟到的祝福(四)
    ACM_梦中的函数
    ACM_ZHANGZHANG喜欢手表
    ACM_出题人这样不好吧
    ACM_Mystery
    ACM_Repeating Characters
    P1160 队列安排 luogu洛谷
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/redis_fastjson.html
Copyright © 2011-2022 走看看