天天看点

Method search not annotated with HTTP method type (ex. GET, POST)

遇到这个问题,想必是使用 Fegin 的时候遇到的,不废话,我们直接上解决方案:

1.检测 接口上 是否有使用 HTTP接口注解,  如果没有就加上 :

示例:

@PostMapping(value = "/test/hello")
    Integer hello();      

2.在项目里使用Feign的时候,是否采取了FeignConfig 配置方式,那么就需要注意是否FeignConfig里包含 代码:

@Bean
    public Contract feignContract(){
        return new Contract.Default();
    }      

如果有,你还想使用@PostMapping 或者@GetMapping 这一类注解 ,或者是说还想使用 @RequestMapping一类的注解,那么就把上面的这个代码注释掉即可。

为什么,因为如果使用了 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