package com.itmuch.cloud; import org.springframework.cloud.netflix.feign.FeignClient; import com.itmuch.cloud.entity.User; import com.itmuch.config.FeignConfiguration; import feign.Param; import feign.RequestLine; /** * 客户端请去 * @author Administrator * */ @FeignClient(name="microservice-provider-user",configuration=FeignConfiguration.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 @FeignClient
which uses Spring MVC annotations.
意思就是feign 默认使用的是spring mvc 注解(就是RequestMapping 之类的), 所以需要配置feign的Configuration ..
很显然我上面的代码显示我配置了 configuration ..
package com.itmuch.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import feign.Contract; @Configuration public class FeignConfiguration { @Bean public Contract feignConfiguration(){ return new feign.Contract.Default(); } }
.. 但是还是会报错。。 最后发现 是 feignConfiguration 这个命名的问题,和 类名一样。。 我随便该了一个名字就可以正常启动了。。
可能是@Bean 的原因。。接下来我查了下:
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。
注意 添加bean的 ID 是 方法名。
那么配置一个和 @Configuration 注解的类同名的 ID 名的 bean 有什么影响吗
<bean id="feignConfiguration" class="org.springframework.context.annotation.Configuration">
我觉得是spring 把 @Configuration 注解的类不注册到 spring 容器中,由于正好你定义的bean 的id 和 类名相同,导致spring没有注册该bean,
所以相当于没有配置启用feign 注解,所有报错。。
上面是我的猜测,知道的大神可以指教一下。