【Feign】解决--feign.FeignException$MethodNotAllowed: status 405 reading
需要检查
1)接口的请求参数是否一致
2)请求参数是否正确添加映射
3)请求方式是否正确
报错信息如下:
排查出错信息:
/**
* @RestController WEB层返回前端json数据
* @param tbItem 商品参数
* @param desc 商品描述
* @param itemParams 商品规格
* @return
*/
@RequestMapping("/insertTbItem")
public Result insertTbItem(TbItem tbItem, @RequestParam("desc") String desc, @RequestParam("itemParams")String itemParams){
Integer flag=itemServiceFeign.insertTbItem(tbItem,desc,itemParams);
if(flag != 0){
return Result.ok("Ok");
}else {
return Result.error("Error");
}
}
显然这里并没有错,接着往下找
@FeignClient("item-service")
public interface ItemServiceFeign {
/**
* Feign接口
* -->数据量较小在这里采取get请求
* 在传递参数时,多个参数@RequestParam 必须指定名称
* 传递对象参数类型时必须加上@RequestBody,并且参数列表中只能有一个@RequestBody
* @param tbItem
* @param desc
* @param itemParams
* @return
*/
@GetMapping("/service/item/insertTbItem")
Integer insertTbItem(@RequestBody TbItem tbItem, @RequestParam(value = "desc") String desc, @RequestParam(value = "itemParams") String itemParams);
Feign接口也没有错,再排查远程服务提供方:
@RestController
@RequestMapping("/service/item")
public class ItemController {
@Autowired
private ItemService itemService;
/**
*
* @param tbItem
* @param desc
* @param itemParams
* @return
*/
@GetMapping("/insertTbItem")
Integer insertTbItem(@RequestBody TbItem tbItem, @RequestParam(value = "desc") String desc, @RequestParam(value = "itemParams") String itemParams){
return itemService.insertTbItem(tbItem, desc, itemParams);
}
明明Feign发送的是Get请求,到了提供者这边却变成了Post
原因:因为Feign默认使用的连接工具实现类,所以里面发现只要你有body体对象,就会强制的把GET请求转换成POST请求。
解决办法:
1)在Feign接口pom.xml中加入依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.9</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>10.2.3</version>
</dependency>
2)在服务调用方加入
feign:
httpclient:
enabled: true
最后重启,解决问题!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?