使用redisson cache来实现一个缓存功能,缓存省市县的名称,key是区域编码,integer,value是name。结果取的时候,怎么都取不出。

Map<Integer, String> regionsMap
regionsMap.get(110000) == null;

找了半天问题才发现regionsMap的key都是字符串。

for (Map.Entry<Integer, String> entry : regionsMap.entrySet()) {
int code = entry.getKey();
String name = entry.getValue();
String s = regionsMap.get(code);
System.out.println(s);
}

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

我加入缓存的时候明明是Integer做为key的,清空缓存直接调用没问题,当从缓存取出来fan序列化后就变成了String key.

redisson采用JsonJacksonCodec反序列化时,是用Object作为对象decode.

private final Decoder<Object> decoder = new Decoder<Object>() {
@Override
public Object decode(ByteBuf buf, State state) throws IOException {
return mapObjectMapper.readValue((InputStream) new ByteBufInputStream(buf), Object.class);
}
};

这个会默认把key设置成string。

测试

@Test
public void testMap() throws IOException {
ObjectMapper mapper = new ObjectMapper();
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b"); String s = mapper.writeValueAsString(map);
//{"1":"a","2":"b"}
System.out.println(s); HashMap o = (HashMap)mapper.readValue(s, Object.class);
assertEquals(o.get("1"), "a");
assertNotEquals(o.get(1), "a");
}

因此,不要用Integer做为key,如果你想使用Json序列化。

在使用json缓存的时候,同样不要将Integer当作HashMap的key类型。

最新文章

  1. 使用 UnrealPak.exe 创建 Pak文件方法
  2. 自己用WordPress搭了个站点
  3. asp 实现域名转向
  4. poj 题目分类(1)
  5. 转:Python时间戳和日期的相互转换
  6. 异步处理工具类:AsyncTask
  7. 总结Selenium自动化测试方法(二)测试环境搭建
  8. 反汇编windows htonl()函数
  9. HDU 5914 Triangle 【构造】 (2016中国大学生程序设计竞赛(长春))
  10. 使用performance进行网页性能监控
  11. linux下的powerline安装教程
  12. Linux系统常用升级的基础包
  13. &quot;Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs
  14. AI caffe
  15. iOS- UITextView与键盘回收与键盘遮挡输入框
  16. leetcode python 032 识别最长合法括号
  17. [No0000141]Outlook,设置全局已读回执
  18. 51nod 1130 N的阶乘的长度 V2(斯特林近似)
  19. AGC006D Median Pyramid Hard
  20. Android - 序列化与反序列化

热门文章

  1. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十三集之Redis的单机版搭建】
  2. 057 Java中kafka的Producer程序实现
  3. 无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换
  4. Java 之 Web前端(四)
  5. Dev-C++安装第三方库boost
  6. 李宏毅机器学习笔记6:Why deep、Semi-supervised
  7. phpmyadmin 修改执行时间
  8. 虚拟主机的IIS连接数和访问流量限制各是什么
  9. VeeamBackup9.5安装与配置
  10. [蓝点zigBee] CC2530 实用教程总览