在学习SpringCloud过程中,使用OpenFeign发送请求时,OrderClient.java有以下代码
@FeignClient(value = "trade-service")
public interface OrderClient {
@GetMapping("/orders/updateById")
public void updateOrderById(@RequestBody Order order);
}
在PayserviceImpl中调用 orderClient.updateOrderById(order) 时,报错
[405] during [GET] to [http://trade-service/orders/updateById] [OrderClient#updateOrderById(Order)]: [{“timestamp”:“2024-03-24T13:06:37.962+00:00”,“status”:405,“error”:“Method Not Allowed”,“path”:“/orders/updateById”}]
大致意思是在调用orderClient的get请求时,OpenFeign不允许该方法调用。
我不能理解为什么不能调用该方法,直到想起来 @RequestBody 接收的是json,map等数据格式
而get请求发送的参数是在url后边的,没有json格式,只能通过@RequestParam(“xxx”)来获取get请求数据
然后我把@GetMapping改为@PostMapping之后,就不报错了
解决方案
将OrderClient、TradeController中,请求参数使用@RequestBody接受的方法,将请求方式注解改为@PostMapping,就不会爆以上错误
原因: @RequestBody 接收的是json,map等数据格式,而@PostMapping才会发送json等数据格式,@GetMapping不行