当前位置: 首页 > 知识库问答 >
问题:

注射假客户

左凯定
2023-03-14

我有一个错误,当我注入feignClient接口在我的服务。这是我使用的Spring引导和Spring云版本:

组织。springframework。启动:spring启动程序父级:2.0.6。发布spring云版本:Finchley。SR2

但是当我在我的类服务中创建一个虚假客户端bean时,它就工作了。

创建客户外部客户端:

@Component("DepartmentClient")
@FeignClient(name = "DEPARTMENT-SERVICE", url = "http://test")
public interface DepartmentClient {

    @RequestMapping(value = "/department/{departmentId}", method = RequestMethod.GET)
    void findDepartmetById(@PathVariable("departmentId") int departmentId);

}

我把这个假冒的客户注入军队

@Service
public class AgentService {

    Logger logger = LoggerFactory.getLogger(AgentService.class);

    @Autowired
    private AgentRepository agentRepository;

    @Autowired
    private DepartmentClient departmentClient;
....
}

输出

Field departmentClient in ...AgentService required a bean of type '...DepartmentClient' that could not be found.
The injection point has the following annotations:
org.springframework.beans.factory.annotation.Autowired(required=true)
Action:

Consider defining a bean of type .... DepartmentClient' in your configuration.

共有3个答案

缪晋
2023-03-14

在上面的答案中添加更多细节:

在@FeignClient注释中,字符串值(“上面的department”)是一个任意的客户端名称,用于创建功能区负载平衡器。还可以使用URL属性(绝对值或仅主机名)指定URL。应用程序上下文中bean的名称是接口的完全限定名。要指定自己的别名值,可以使用@FeignClient注释的限定符值。

要使外部客户正常工作,我们需要执行以下步骤:

1.外部客户端的更改:它应该是一个带有外部客户端注释的接口

@FeignClient(
  name = "DEPARTMENT-SERVICE",
  configuration = {DepartmentConfiguration.class},
  fallback = DepartmentFallback.class
)
@RequestMapping(
  value = {"${service.apipath.department}"},
  consumes = {"application/json"},
  produces = {"application/json"}
)
public interface DepartmentClient {

  @RequestMapping(value = "/department/{departmentId}", method = 
    RequestMethod.GET)
  void findDepartmetById(@PathVariable("departmentId") int departmentId);

}

2.主要类别的变化:

@EnableFeignClients
@SpringBootApplication
public class DepartmentApplication {
  public static void main(String[] args) {
    SpringApplication.run(DepartmentApplication.class, args);
  }
}
郗丰
2023-03-14

您是否尝试删除模拟界面的@Component?

否则看看您的spring应用程序组件扫描,如果您的接口不是扫描,那么bean将不会被创建

马侯林
2023-03-14

要让FaignClient工作,您必须将@EnableFaignClients添加到配置类或@SpringBootApplication类

@SpringBootApplication
@EnableFeignClients
public class FooMain {  // Your Main class
    public static void main(String[] args) {
        SpringApplication.run(FooMain.class, args);
    }
}
 类似资料:
  • 我有我的Jhipster配置/应用程序属性。java类设置和工作,但不清楚如何将属性值注入url的假客户端注释: 使用@Value在下面不起作用: 有什么想法吗?

  • 我对假装很陌生。今天就发现吧……当我读到Spring Cloud Feign时,我的第一个问题是:“您如何包装您的Fiign客户机?” 我举个例子。假设我们有2个微服务M1和M2。M2使用来自M1的endpoint。 null 也许我完全错了,请指正。 多谢!拜拜

  • 使用Spring云合同验证生产者和消费者之间的合同。在我的消费者控制器中,我正在使用Feign client调用另一个微服务方法来获取一些数据。但是现在在SpringCloud contract中,为这个微服务进行存根调用是不可能的。 使用Spring Cloud与Netflix OSS。

  • 这是原样代码。 我用假客户机修改了代码。像这样。 从功能上来说,没有问题。 有人帮忙吗,拜托。谢谢!

  • 我肯定在这里缺少某种序列化程序 任何建议都将不胜感激! 谢谢

  • 我正在使用spring Cloud的eureka和feign在一些服务之间进行通信(比如A和B)。现在我想统一测试一个服务(a)的服务层。问题是,这个服务(A)正在使用一个假客户机来请求其他服务(B)的一些信息。 编辑:我最终为虚假客户机创建了一个存根。存根被标记为主要组件,以强制spring在我的测试中实例化存根。 这是我提出的解决方案。