类 java.util.LinkedHashMap 不能转换为类 [...]

Posted

技术标签:

【中文标题】类 java.util.LinkedHashMap 不能转换为类 [...]【英文标题】:class java.util.LinkedHashMap cannot be cast to class [...] 【发布时间】:2022-01-14 15:24:40 【问题描述】:

我正在向 WooCommerce API 发出 GET 请求以获取订单,我的想法是从响应中获取一些数据并将其插入本地数据库。我测试了请求,一切正常。所以我继续使用 QuickType 能够创建对应于响应的类,所以我有办法将它保存并插入到数据库中。问题如下,如果我注释“for”语句,没有问题。但是在使用它来获取答案的值并将它们插入数据库的那一刻,就会出现这个错误: 类 java.util.LinkedHashMap 不能转换为类 [我的类的名称]。 并且: [我的班级]在加载器 org.springframework.boot.devtools.restart.classloader.RestartClassLoader 的未命名模块中。你能帮我找到解决这个问题的方法吗? 代码如下:

@GetMapping("/ordenes")
    public List<WcOrden> getOrdenes() 

        List<WcOrden> ordenes = (List<WcOrden>) wc.getAll(EndpointBaseType.ORDERS.getValue(), params);
        for (WcOrden orden : ordenes) 
            log.debug("This is an order");
        
        return ordenes;
    

【问题讨论】:

wc.getAll 方法返回什么?如果它返回类似java.util.LinkedHashMap 的内容,那么您不能将其转换为List&lt;WcOrden&gt; 对象,因为LinkedHashMap 不是List wc.getAll 返回一个 List,但 List getAll(String endpointBase, Map&lt;String, String&gt; params); 内部没有泛型类型所以我认为如果它返回一个 List,我可以将它转换为 List 对吗? 【参考方案1】:

我假设 wc.getAll(...) 是对外部 API 的调用。

当 Jackson 没有足够的关于要反序列化到哪个类的信息时,它会使用 LinkedHashMap

在您的情况下,它知道它是一个列表,但不是列表中元素的实际类型,如article 中所述。

所以,要解决它,你可以使用 ObjectMapper 的 convertValue:

ObjectMapper mapper = new ObjectMapper(); // or inject it as a dependency
List<WcOrden> pojos = mapper.convertValue(wc.getAll(...), new TypeReference<List<WcOrden>>()  );

【讨论】:

好的,我明白了。我测试了它,它似乎工作正常,没有像以前那样发生同样的错误。问题是现在我有另一个。这次我一直在调查错误:无法识别的字段“payment_method_title”。据我了解,在我的映射类中,我必须使用 @JsonProperties 注释,并且我将此注释添加到我的所有属性中,与 API 返回的 json 相对应。但是,我仍然遇到同样的错误,即 Unrecognized field "payment_method_title" (class [my class],未标记为可忽略。 如果你不需要这个字段,你可以在你的 WcOrden 类上使用如下注解:@JsonIgnoreProperties(ignoreUnknown = true) 嗯,在我需要的几个地方添加了这些注释后,它工作正常。非常感谢! 不客气,很高兴我能帮上忙

以上是关于类 java.util.LinkedHashMap 不能转换为类 [...]的主要内容,如果未能解决你的问题,请参考以下文章

Java基础Map

无法构造 java.util.LinkedHashMap 的实例:没有字符串参数构造函数/工厂

java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap 无法转换为 java.util.LinkedHashMap

LinkedHashMap和HashMap的比较使用

LinkedHashMap和HashMap的比较使用(转)

java.lang.ClassCastException:java.util.LinkedHashMap 无法转换为 com.testing.models.Account