【问题标题】:Exception java.util.LinkedHashMap cannot be cast to java.util.List异常 java.util.LinkedHashMap 无法转换为 java.util.List
【发布时间】:2016-02-23 07:08:37
【问题描述】:

在处理以下代码时,我得到了下面给出的异常。

List<Map<String, Object>> obj = mapper.readValue(result.getBody(), new TypeReference<Map<String,Object>>(){});

for (Map<String, Object> map : obj) {
    for(Map.Entry<String, Object> entry : map.entrySet()){
        System.out.println("Key : "+entry.getKey()+" Value is: "+entry.getValue());
    }
}

堆栈跟踪java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.util.List

【问题讨论】:

  • 哪一行抛出异常?第一个?你试过用new TypeReference&lt;List&lt;Map&lt;String,Object&gt;&gt;&gt;(){}替换new TypeReference&lt;Map&lt;String,Object&gt;&gt;(){}吗?
  • @BorisPavlović,是的,我现在试过了,但我收到异常消息:无法在 [Source: {"total":1,"movies ":[{"id":"771390242","title":"死侍"}]
  • 使用Map&lt;String, Object&gt; obj = mapper.readValue(result.getBody(), new TypeReference&lt;Map&lt;String,Object&gt;&gt;(){});
  • 你能解决这个问题吗?

标签: java foreach mapper


【解决方案1】:

您只需要使用地图而不是地图列表。

 Map<String, Object> object = mapper.readValue(result.getBody(), new TypeReference<Map<String,Object>>(){});
 for(Map.Entry<String, Object> entry : object.entrySet()){
    System.out.println("Key : "+entry.getKey()+" Value is:"+entry.getValue());
}

【讨论】:

    【解决方案2】:

    试试这个:您是否尝试将 MapObject 存储在 List.so 中,而不是 Map 存储在 List 中。

    代替:

    List<Map<String, Object>> obj = mapper.readValue(result.getBody(),
    new TypeReference<Map<String,Object>>(){});
    

    使用这个:

    List<Map<String, Object>> obj = mapper.readValue(result.getBody(), 
    new TypeReference<List<Map<String,Object>>>(){});
    

    对于演示示例This Link

    【讨论】:

    • 嘿@Benjamin,我试过了。尝试后我得到了这个错误: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: {"total":1,"movies":[{"id":"771390242","title" :"死侍"}]
    猜你喜欢
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多