You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jackson反序列化报错:LinkedHashMap无法转换为model.Artists

解决RestTemplate反序列化集合时的ClassCastException问题

这个问题我太熟悉了——本质是泛型擦除在RestTemplate反序列化时搞的鬼,根本不需要更换JSON数据获取方式,只要调整类型处理逻辑就能解决!

问题根源

当你用RestTemplate直接请求并接收ArrayList<Artists>时,Java的泛型在运行时会被擦除,RestTemplate无法识别集合中元素的具体类型,只能默认把JSON数组里的每个对象反序列化成LinkedHashMap(以键值对形式存储JSON字段)。这时候你试图把LinkedHashMap强转成model.Artists,自然就会抛出ClassCastException。

两种解决方案(推荐第一种)

方案1:获取数据时明确泛型类型(从源头解决)

使用ParameterizedTypeReference来告诉RestTemplate集合的具体泛型类型,这样它就能直接把JSON反序列化成List<Artists>,后续过滤无需额外转换:

RestTemplate restTemplate = new RestTemplate();
String apiUrl = "你的目标JSON接口地址";

// 用ParameterizedTypeReference指定List<Artists>的类型
ParameterizedTypeReference<List<Artists>> typeReference = new ParameterizedTypeReference<List<Artists>>() {};
ResponseEntity<List<Artists>> response = restTemplate.exchange(apiUrl, HttpMethod.GET, null, typeReference);

// 直接拿到正确类型的列表,过滤操作毫无压力
List<Artists> allArtists = response.getBody();
List<Artists> filteredArtists = allArtists.stream()
    .filter(artist -> /* 你的过滤条件,比如artist.getPopularity() > 80 */)
    .collect(Collectors.toList());

方案2:手动将LinkedHashMap转换为Artists实例(适配已有的数据)

如果你已经拿到了List<LinkedHashMap>,可以借助Jackson的ObjectMapper把每个Map对象转成Artists实例(你的项目已经引入Jackson依赖,因为实体类用了@JsonIgnore注解):

// 假设你已获取到rawList = restTemplate.getForObject(apiUrl, ArrayList.class);
ObjectMapper objectMapper = new ObjectMapper();
List<Artists> allArtists = new ArrayList<>();

for (LinkedHashMap<String, Object> artistMap : rawList) {
    // 把LinkedHashMap转成Artists实例
    Artists artist = objectMapper.convertValue(artistMap, Artists.class);
    allArtists.add(artist);
}

// 现在可以正常过滤了
List<Artists> filteredArtists = allArtists.stream()
    .filter(...)
    .collect(Collectors.toList());

额外注意事项

  • 确保你的Artists实体类有无参构造方法(Jackson反序列化必须);
  • 如果JSON字段名和实体类字段名不匹配,记得用@JsonProperty注解映射,比如@JsonProperty("artist_name") private String name;;
  • 优先选择方案1,它更简洁且避免了额外的转换开销。

内容的提问来源于stack exchange,提问作者OanaV.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:40:05