前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Map<Integer,Value>放入缓存后取出来变成了Map<String,Value>

Map<Integer,Value>放入缓存后取出来变成了Map<String,Value>

作者头像
翎野君
发布2023-05-12 20:32:23
2730
发布2023-05-12 20:32:23
举报
文章被收录于专栏:翎野君翎野君

背景

将一个类型为Map<Integer, String>的一个Map对象放到redis中后,再次取出来时。当我们想便利Map.entrySet()获取每个Entry中的Key,如执行Integer key = entry.getKey();

那么在执行时就会报错:java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

代码语言:javascript
复制
Map<Integer,String> cacheMap =(Map<Integer,String>)redisCache.get(key);

for (Map.Entry<Integer, String> entry : cacheMap.entrySet()) {
    Integer key = entry.getKey();
    String value = entry.getValue();
}

探究

debug时发现,在从redis获得这个Map<Integer,String> cacheMap对象时,它其中的Key的实际类型已经是String类型。这是因为redisson采用JsonJacksonCodec反序列化时,是用Object作为对象decode。在这一步会默认把key设置成string。

代码语言:javascript
复制
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);
        }
    };

测试

代码语言:javascript
复制
@Test
public void testMap() throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    HashMap<Integer, String> map = new HashMap<>();
    map.put(11, "little");
    map.put(6, "nuts");

    String s = mapper.writeValueAsString(map);
    //{"11":"little","6":"nuts"}
    System.out.println(s);

    HashMap o = (HashMap)mapper.readValue(s, Object.class);
    assertEquals(o.get("11"), "little");
    assertNotEquals(o.get(11), "little");
}

总结

如果要针对,对象进行JsonJackson序列化时,如果对象是Map,则需要注意不要用Integer做为key。如果要将一个json对象作为redis缓存时,同样不要将Integer当作HashMap的key类型。

首发链接:https://cloud.tencent.com/developer/article/2285744

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 探究
  • 测试
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档