【Result<T>泛型接收转化失败】

问题描述:

最近有个接口,明明接受对象是同一个,但是却报错

代码如下

系统A 的接口

java 复制代码
@RestController
@RequestMapping("log")
public class LogController {

    @GetMapping("getLog")
    List<LogInfo> getLog(){
        List<LogInfo> logInfos = new ArrayList<>();
        LogInfo logInfo = new LogInfo();
        logInfo.setMsg("1");
        logInfo.setName("t1");
        LogInfo logInfo2 = new LogInfo();
        logInfo2.setMsg("2");
        logInfo2.setName("t2");
        logInfos.add(logInfo);
        logInfos.add(logInfo2);
        return logInfos;
    }
}

系统B接入

java 复制代码
@RestController
@RequestMapping("myService")
public class MyController {

    @Resource
    RestTemplate restTemplate;

    @GetMapping("getLog")
    Result<List<LogInfo>> getLog(){
        List<LogInfo> logInfos = restTemplate.getForObject("http://localhost:9001/log/getLog", List.class);
        return Result.OK(logInfos);
    }

    @GetMapping("deal")
    Result<?> deal(String name){
        Result<List<LogInfo>> log = getLog();
        List<LogInfo> logInfos = log.getData();
        Map<String, List<LogInfo>> collect = logInfos.stream().collect(Collectors.groupingBy(LogInfo::getName));
        return Result.OK(collect.get(name));
    }
}

猜猜哪个方法报错了

接收没问题,处理报错了

这个错误是因为在使用RestTemplate时,没有指定返回的List中的元素类型,导致RestTemplate将JSON反序列化为List,而不是List。

当我们尝试将LinkedHashMap转换为LogInfo时,就会抛出ClassCastException。
解决方法

方案一:使用exchange方法,并传递ParameterizedTypeReference

java 复制代码
@GetMapping("exchange")
    Result<?> exchange(String name){
        ResponseEntity<List<LogInfo>> responseEntity = restTemplate.exchange(
                "http://localhost:9001/log/getLog",
                HttpMethod.GET,
                null,
                new ParameterizedTypeReference<List<LogInfo>>() {});
        List<LogInfo> logInfos = responseEntity.getBody();
        Map<String, List<LogInfo>> collect = logInfos.stream().collect(Collectors.groupingBy(LogInfo::getName));
        return Result.OK(collect.get(name));
    }
相关推荐
jxy99985 分钟前
mac mini 安装java JDK 17
java·开发语言·macos
biyezuopinvip8 分钟前
基于Spring Boot的企业网盘的设计与实现(毕业论文)
java·spring boot·vue·毕业设计·论文·毕业论文·企业网盘的设计与实现
Hx_Ma1610 分钟前
SSM搭建(三)Spring整合SpringMVC框架
java·后端·spring
无风听海12 分钟前
.NET10之ASP.NET Core的Filter管线
java·asp.net·.net
少许极端13 分钟前
算法奇妙屋(二十八)-递归、回溯与剪枝的综合问题 1
java·算法·深度优先·剪枝·回溯·递归
Boop_wu16 分钟前
简单介绍 JSON
java·开发语言
知识即是力量ol21 分钟前
初识 Kafka(一):分布式流平台的定义、核心优势与架构全景
java·分布式·kafka·消息队列
爱吃生蚝的于勒25 分钟前
【Linux】线程概念(一)
java·linux·运维·服务器·开发语言·数据结构·vim
kong790692827 分钟前
Nginx性能优化
java·nginx·性能优化
Pluchon28 分钟前
硅基计划4.0 算法 简单模拟实现位图&布隆过滤器
java·大数据·开发语言·数据结构·算法·哈希算法