
正文
spring cloud Feign 使用 @RequestLine 注解遇到的问题
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
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 注解,所有报错。。
上面是我的猜测,知道的大神可以指教一下。







