feign调用远程接口报错“Request method ‘POST‘ not supported”

146 阅读1分钟

在使用feign调用远程接口时,报“Request method ‘POST‘ not supported”异常,原因是feign的GET方法不能够解析对象参数,若直接在方法中传入类对象作为参数,框架无法将这个对象解析成query参数。

一开始考虑使用@RequestParam注解,但这个解决方案需要写大量参数,并不建议使用,推荐将@RequestParam改为@SpringQueryMap。

@FeignClient(contextId = "remotePersonLikeService",value = ServiceNameConstants.CHECKPERSON_SERVICE,fallbackFactory = RemotePersonLikeFallbackFactory.class)
public interface RemotePersonLikeService {
    @GetMapping(value = "/like/list")
    public R<List<PersonLike>> selectPersonLikeList(@SpringQueryMap PersonLike personLike);
}

进一步考虑OpenFeign的@QueryMap注解,因为其支持在GET方法中使用类对象作为参数,然而@QueryMap缺少的value属性导致与Spring的不兼容,使得这个方法也行不通。

好在Spring Cloud OpenFeign 可以通过@SpringQueryMap注解作为替代方案,此注解的作用就是把类对象解析成键值对形式的query参数格式,将pojo或map参数映射为查询参数。