【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

最后重啟,解決問題!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM