当前位置: 首页 > 面试题库 >

从另一个项目注入FeignClient时出错

梁丘书
2023-03-14
问题内容

我在从另一个项目自动连接伪装客户端时遇到麻烦。似乎没有生成并注入伪客户端的实现。

这是我得到的错误。

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'passportRestController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
Could not autowire field: private com.wstrater.service.contacts.client.ContactService com.wstrater.service.passport.server.controllers.PassportRestController.contactService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type [com.wstrater.service.contacts.client.ContactService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: 
{@org.springframework.beans.factory.annotation.Autowired(required=true)}

假装客户很直接。为简便起见,我已删除了进口商品。

package com.wstrater.service.contacts.client;

@FeignClient("contact-service")
public interface ContactService {

  @RequestMapping(method = RequestMethod.GET, value = ContactConstants.CONTACTS_USER_ID_PATH)
  public Collection<Contact> contactsByUserId(@PathVariable("userId") String userId);

}

我将组件扫描添加到我的项目中,以包括应用程序及其控制器,并在另一个项目中包含伪装客户端。

package com.wstrater.service.passport.server;

@EnableEurekaClient
@EnableFeignClients
@SpringCloudApplication
@ComponentScan({"com.wstrater.service.passport.server",
                "com.wstrater.service.contacts.client"})
public class PassportServiceApplication {

  public static void main(String[] args) {
    ApplicationContext ctx = SpringApplication.run(PassportServiceApplication.class, args);
  }

}

为简洁起见,其余的控制器删除了大部分的导入。

package com.wstrater.service.passport.server.controllers;

import com.wstrater.service.contacts.client.ContactService;

@RestController
public class PassportRestController {

  @Autowired
  private ContactService contactService;

  @RequestMapping(PassportContstants.PASSPORT_USER_ID_PATH)
  public ResponseEntity<Passport> passportByUserId(@PathVariable String userId) {
    ResponseEntity<Passport> ret = null;

    Collection<Contact> contacts = contactService.contactsByUserId(userId);
    if (contacts == null || contacts.isEmpty()) {
      ret = new ResponseEntity(HttpStatus.NOT_FOUND);
    } else {
      ret = ResponseEntity.ok(new Passport(contacts));
    }

    return ret;
  }

}

我曾尝试在不同的项目和不同的程序包中定义伪客户端接口,并且只有在将其与应用程序放在同一程序包中时才看到成功。即使我将软件包包括在扫描中,也可以认为这是组件扫描问题。我想将虚拟客户端接口保留在共享项目中,以定义可重用的“合同”,并使每个项目具有唯一的包结构,而不是使用使用它的应用程序定义虚拟客户端。

谢谢,韦斯。


问题答案:

您需要告诉Feign扫描仪在何处定位接口。

您可以使用@EnableFeignClients(basePackages = {"my.external.feign.client.package", "my.local.package"})



 类似资料:
  • 我有两个包com.a.b.c和com.x.y.z。在com.a.b2.c中,我定义了这样一个组件: 在com.x.y.z中,我有一个类,我想像这样注入我的ClassA: 我需要做什么样的配置更改才能将我的类注入到我的其他类中?现在我得到了构建错误 org.springframework.beans.factory。NoSuchBeanDefinitionException:未找到依赖项的[com.

  • 问题内容: 我正在eclipse中进行两个项目,我想将一些类从项目a导入到项目b。我该怎么办? 有没有一种方法可以在不将项目添加到构建路径的情况下进行? 问题答案: 将项目A添加到项目B的构建路径。 请按照下列步骤操作: 通过 在Eclipse中右键单击项目B的文件夹进行编辑->属性->构建路径->项目->添加。 现在添加项目A

  • 我来自Maven背景,对Gradle非常陌生。以下是上下文。 我有一个图书馆项目 LibraryStarter 需要将其导入到 图书馆用户 项目。 这两个都是spring boot的项目和建筑 无法使用分级分发“https://services.Gradle.org/distributions/gradle-6.6.1-bin.zip”运行分阶段生成操作。生成文件“C:\work\learn\us

  • 我在eclipse STS中创建了一个Maven3 web项目(maven-archetype-webapp)。 现在,我想通过将项目从eclipse导出并导入到另一台机器上的eclipse中,在两台机器之间执行该项目。 我的目标是在另一台机器上的eclipse IDE中创建一个开发中项目的完美克隆,它的所有源代码都在我的eclipse IDE中,这样我就可以继续工作了。 对于普通的Java EE

  • 当尝试编译名为UserO的原始文件时ptions.proto它有一个名为A的导入ccount.proto使用下面的命令 我得到以下错误: PS:用户选项。proto位于目录/home/project\u new1/settings中导入帐户。proto存在于目录/home/project\u new1/account中 原型描述符文件: 用户选项。原型 账户原型

  • 问题内容: 我有一个和一个。 我想用的。 当我通过注射添加时: 我得到这个嵌套错误: [嵌套] 11592-2018-8-13 11:42:17 [ExceptionHandler] Nest无法解析PlayersService(+,?)的依赖项。请确保索引[1]的参数在当前上下文中可用。 这两个模块均导入。两种服务都在其模块中单独工作。 问题答案: 你要 导出 的是它提供的模块: 然后将导出 模