本文主要是介绍openfeign服务相互调用碰到问题总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
起因:服务A调用服务B,B中返回了数据,A服务没接收到。
经查发现是服务A中标注@FeignClient的接口,数据类型和服务B的返回的类型不一样。
一、服务B
@RestController
@RequestMapping("/lanren312")
public class Lanren312Controller {@GetMapping("findById")public SimpleResp<Object> findById(@RequestParam("id") String id) {SimpleResp<Object> resp = lanren312Service.findById(id); // 如果这里面返回的List<String>就没问题,如果是一个对象集合,那么Lanren312Service中也要写对象集合return resp;}
}@Data
public class SimpleResp<T> {private Integer code;private String msg;private T data;
}
二、服务 A
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
// 启动类上添加@EnableFeignClients,basePackages指向标注了@FeignClient注解的接口
// feign目录下包含多个接口,Lanren312Service
@EnableFeignClients(basePackages = {"com.lanren312.feign"})
@FeignClient(name = "lanren312",fallback = Lanren312ServiceFallback.class) // name只是一个名称。
public interface Lanren312Service {// 样例一,这里用 List<String>, 那A服务里面的findById返回的也必须是 List<String>,如果返回的是对象就会报错:"获取信息失败"@GetMapping("/lanren312/findById")SimpleResp<List<String>> findById(@RequestParam("id") String id);// 样例二,如果A服务里面的findById返回的是 List<lanren312Vo>,这里就可以这样写@GetMapping("/lanren312/findById")SimpleResp<List<lanren312Vo>> findById(@RequestParam("id") String id); // 样例三,可以这样写,B服务调用后需要处理下@GetMapping("/lanren312/findById")SimpleResp<Object> findById(@RequestParam("id") String id);
}
@Component
public class Lanren312ServiceFallback implements Lanren312Service {@Overridepublic SimpleResp<List<String>> findById(String id) {return new SimpleResp<>(-1, "获取信息失败");}......
}
具体的调用
@Resource
private Lanren312Service lanren312Service// 样例二
SimpleResp<List<GetTeacherStudentListResp>> result = lanren312Service.findById(id); // 直接是对象
List<String> ids = listLink.stream().map(it -> it.get("id").toString()).collect(Collectors.toList());// 样例三
SimpleResp<Object> result = lanren312Service.findById(id);
List<LinkedHashMap<String, Object>> listLink = (List<LinkedHashMap<String, Object>>) result.getData(); // 是一个 LinkedHashMap
List<String> ids = listLink.stream().map(it -> it.get("id").toString()).collect(Collectors.toList());
这篇关于openfeign服务相互调用碰到问题总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!