JSON序列化Redis读取出错问题解决方案
报错
org.springframework.web.util.NestedServletException:Requestprocessingfailed;nestedexceptioniscom.alibaba.fastjson.JSONException:syntaxerror,expect{,actualstring,pos1,fastjson-version1.2.44
问题分析
在写入缓存的时候,hash结构,它的value值,在写入前使用JSON序列化了,JSON.toJSONString(value)
在取缓存的时候把一个Collection作为对象序列化了,并不是把List序列化,所以在反序列化的时候不能用List来解析
//读取缓存返回String
BoundHashOperationshash=this.template.boundHashOps(key);
Collectionlist=hash.entries().values();
returnJSON.toJSONString(list);//将String解析成List
Stringtmp=redisService.listHashObject(BOOK_CATALOG);
returnJSON.parseArray(tmp,BookCatalog.class);
问题出在这里了,把Collection转成List出错,首先强转是不行的
解决
//读取缓存直接返回Collection
BoundHashOperationshash=this.template.boundHashOps(key);
returnhash.entries().values();//将Collection转成List,不能直接转成对象,需要先转换成String,再将单个String反序列化成对象
java.util.Collectiontmp=redisService.listHashObject(BOOK_CATALOG);
Listlist=newArrayList<>(tmp);
Listans=newArrayList<>(list.size());
for(Stringitem:list){
BookCatalogbook=JSON.parseObject(item,BookCatalog.class);
ans.add(book);
}//可以再排个序,本身的hash结构是无序的ans.sort(Comparator.comparing(BookCatalog::getCode));
returnans;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。