类 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<WcOrden>
对象,因为LinkedHashMap
不是List
。
wc.getAll
返回一个 List,但 List getAll(String endpointBase, Map<String, String> params);
内部没有泛型类型所以我认为如果它返回一个 List,我可以将它转换为 List我假设 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.util.LinkedHashMap 的实例:没有字符串参数构造函数/工厂
java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap 无法转换为 java.util.LinkedHashMap
java.lang.ClassCastException:java.util.LinkedHashMap 无法转换为 com.testing.models.Account