第一种报错:405,method not allowed
问题描述
生产者有一个api,根据电影类型进行模糊查询,采用get方法,需要传一个参数name
把这个api用feign在别的模块进行调用时,报了如下错误,405异常
405,“error”:“Method Not Allowed”,“path”:“/api/genre/findByName”
feign.FeignException$MethodNotAllowed: [405] during [GET] to [http://movie-genre/api/genre/findByName] [IGenreFeign#findGenreByName(String)]: [{"timestamp":"2023-09-07T14:33:22.777+00:00","status":405,"error":"Method Not Allowed","path":"/api/genre/findByName"}]
报错解决
需要再feign里面加一下请求的参数的注解
查询成功
路径参数解决
第二种报错:Method has too many Body parameters
问题描述
在一个微服务中,通过feign调用了另一个微服务,需要传两个参数,引入feign之后,报错,报错显示方法参数太多
Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract boolean com.tianju.rabbit.feign.OrderFeign.add2(java.lang.String,java.lang.Integer)
报错解决
package com.tianju.rabbit.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = "order-service")
public interface OrderFeign {
@PostMapping("/add")
boolean add(@RequestParam("commodityCode") String commodityCode,
@RequestParam("nums") Integer nums);
}
总结
在使用feign进行微服务之间远程调用的时候,需要加入相关的注解,@PathVariable:和路径变量传参进行绑定;@RequestParam:和传的参数进行绑定;@RequestBody:如果前端传的JSON对象。