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 @FeignClientwhich 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 注解,所有报错。。

上面是我的猜测,知道的大神可以指教一下。

 

posted on 2018-06-03 11:47  远方的人  阅读(2182)  评论(0编辑  收藏  举报

导航