不要使用Integer做HashMap的key,尤其在json序列化的时候
2024-08-28 01:58:24
使用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类型。
最新文章
- 使用 UnrealPak.exe 创建 Pak文件方法
- 自己用WordPress搭了个站点
- asp 实现域名转向
- poj 题目分类(1)
- 转:Python时间戳和日期的相互转换
- 异步处理工具类:AsyncTask
- 总结Selenium自动化测试方法(二)测试环境搭建
- 反汇编windows htonl()函数
- HDU 5914 Triangle 【构造】 (2016中国大学生程序设计竞赛(长春))
- 使用performance进行网页性能监控
- linux下的powerline安装教程
- Linux系统常用升级的基础包
- ";Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs
- AI caffe
- iOS- UITextView与键盘回收与键盘遮挡输入框
- leetcode python 032 识别最长合法括号
- [No0000141]Outlook,设置全局已读回执
- 51nod 1130 N的阶乘的长度 V2(斯特林近似)
- AGC006D Median Pyramid Hard
- Android - 序列化与反序列化
热门文章
- Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十三集之Redis的单机版搭建】
- 057 Java中kafka的Producer程序实现
- 无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换
- Java 之 Web前端(四)
- Dev-C++安装第三方库boost
- 李宏毅机器学习笔记6:Why deep、Semi-supervised
- phpmyadmin 修改执行时间
- 虚拟主机的IIS连接数和访问流量限制各是什么
- VeeamBackup9.5安装与配置
- [蓝点zigBee] CC2530 实用教程总览