遇到这个问题,想必是使用 Fegin 的时候遇到的,不废话,我们直接上解决方案:
1.检测 接口上 是否有使用 HTTP接口注解, 如果没有就加上 :
示例:
@PostMapping(value = "/test/hello") Integer hello();
2.在项目里使用Feign的时候,是否采取了FeignConfig 配置方式,那么就需要注意是否FeignConfig里包含 代码:
@Bean public Contract feignContract(){ return new Contract.Default(); }
为什么,因为如果使用了 new.Contract.Default() 相当于把fegin组件默认使用的 ‘SpringMVC 契约’ 给替换成 ‘fegin自带契约’。
那么,如果你就是想配置这个 Contract ,那就使用 @RequestLine即可。
示例(注意格式 ,使用@RequestLine的时候 ,访问的方式 get/post 是直接写在 value里面 与具体的访问地址以 空格 相隔):
@RequestLine(value = "POST /test/hello") Integer hello();
说白了,也就是所谓使用‘不同契约’,然后遵循不同得规则罢了。
SpringMVC 契约 :
@PostMapping 、@GetMapping、@RequestMapping 等等
传参使用 @RequestParam 、@RequestBody
Fegin 契约 :
@RequestLine
传参使用 @Param