1. 程式人生 > 其它 >FeignClient 呼叫服務端時,服務端報錯:Request method ‘POST‘ not supported]

FeignClient 呼叫服務端時,服務端報錯:Request method ‘POST‘ not supported]

技術標籤:專案中的問題javaspring boot

FeignClient 呼叫服務端時,服務端報錯:Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘POST’ not supported]

FeignClient 端

@GetMapping("/purchasingOrder/selectAllPurchasingOrderForJointQuery")
    CommonResult<PageInfo<PurchasingOrder>
> selectAllPurchasingOrderForJointQuery( @RequestParam("page") Integer page, @RequestParam("pageSize") Integer pageSize, @RequestBody PurchasingOrder purchasingOrder);

被呼叫服務端

@GetMapping("/purchasingOrder/selectAllPurchasingOrderForJointQuery")
public CommonResult<
PageInfo<PurchasingOrder>> selectAllPurchasingOrderForJointQuery( @RequestParam("page") Integer page, @RequestParam("pageSize") Integer pageSize, @RequestBody PurchasingOrder purchasingOrder){ return purchasingOrderService.selectAllPurchasingOrderForJointQuery
(page, pageSize, purchasingOrder); }

報錯:

Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]

說不支援Post請求,但是我FeignClient 端用的是Get請求,服務端用的也是Get請求,為什麼會報錯不支援Post請求呢?
而我把客戶端和服務端都改成Post請求後,就解決問題了。

原因:

因為我FeignClient 端的請求引數是@RequestBody PurchasingOrder purchasingOrder,當把物件轉換為json字串的時候 FeignClient會預設傳送Post請求

解決方法

1、如果使用@RequestBody 註解,把客戶端與服務端都改為Post請求
2、如果非要用Get傳送物件型別引數,可以使用@SpringQueryMap註解,前提是的springboot 2.2版本以上,它的作用是直接以物件的形式傳參,服務端可直接用以下方式接收引數:

@GetMapping("/purchasingOrder/selectAllPurchasingOrderForJointQuery")
public CommonResult<PageInfo<PurchasingOrder>> selectAllPurchasingOrderForJointQuery(
										@RequestParam("page") Integer page,
										@RequestParam("pageSize") Integer pageSize,
										PurchasingOrder purchasingOrder){
	return purchasingOrderService.selectAllPurchasingOrderForJointQuery(page, pageSize, purchasingOrder);
}