Feign 调用API报错'No primary or default constructor found for interface java.util.List'
踩坑背景
基于springcloud全家桶的分布式项目,服务之间基于feignclient来调用;上游服务新起了一条API入参List
排查逻辑
作为一名很菜的老鸟,看到这种报错,也第一时间想到应该是API入参的地方缺少了@RequestBody注解,来定义入参的数据格式是JSON;
- 检查API入参处是否有@RequestBody --- 排除
不是明显的错误,那只好debug了
-
根据报错log找到最可能的地方 断点进入 Tomcat 的 ApplicationFilterChain
-
进入到HttpServlet doPost()方法
-
进入到FrameworkServlet processRequest() 报错了
-
debug进入
-
到此 可以看出 是入参实体找不到 映射报错的原因,但是实体类肯定是没有问题的,所以只能是映射参数的地方有问题
-
检查API实现的方式
root cause
😂 上游对外暴露了API,但是上游对自己的API实现的Controller类里面省略了@RequestBody注解, 所以API虽然可以call通,但是一直500;添加@RequestBody 问题解决