Feign使用@RequestLine遇到的坑
如何在微服務項目中調用其它項目的接口試使用spring cloud feign聲明式調用。
1
2
3
4
5
6
7
8
9
10
|
/** * 客戶端請去 * @author RAY * */ @FeignClient (name= "store" ,configuration=FooConfiguration . class ) public interface UserFeignClient { @RequestLine ( "GET /simple/{id}" ) public User findById( @Param ( "id" ) Long id); } |
但是啟動得時候報錯:
Method getLinksForTrack not annotated with HTTP method type (ex. GET, POST)
官方文檔說明
@RequestLine is a core Feign annotation, but you are using the Spring Cloud @FeignClientwhich uses Spring MVC annotations.
意思就是feign 默認使用的是spring mvc 注解(就是RequestMapping 之類的) ,所以需要通過新增一個配置類來修改其“契約”。
1
2
3
4
5
6
7
8
|
@Configuration public class FooConfiguration { @Bean public Contract feignContract() { return new feign.Contract.Default(); //使用feign自帶契約 } } |
PS : feignContract方法名不要跟一樣。否則啟動得時候會報錯。 得改一個跟類名不一樣得方法名!
@RequestLine的使用及配置
@RequestLine與其它請求不同,只需要簡單寫請求方式和路徑就能達到請求其它服務的目的。
1
2
3
4
5
|
@FeignClient (value = "feign-server" ,configuration = FeignConfig. class ) //需要一個配置文件 public interface TestService { @RequestLine ( "POST /feign/test" ) //對應請求方式和路徑 String feign( @RequestBody UserDO userDO); } |
1
2
3
4
5
6
7
8
|
@EnableFeignClients @SpringBootConfiguration public class FeignConfig { @Bean public Contract contract(){ return new feign.Contract.Default(); } } |
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/liangweihua123/article/details/87881358