gpt4 book ai didi

java - 从另一个项目注入(inject) FeignClient 时出错

转载 作者:行者123 更新时间:2023-12-05 07:48:14 25 4
gpt4 key购买 nike

我在自动连接来自另一个项目的假客户端时遇到问题。似乎没有生成和注入(inject) feign 客户端的实现。

这是我遇到的错误。

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);

}

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

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);
}

}

为简洁起见删除了大部分导入的其余 Controller 。

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;
}

}

我曾尝试在不同的项目和不同的包中定义假装客户端接口(interface),并且只有在将它与应用程序放在同一个包中时才看到成功。这让人相信这是一个组件扫描问题,即使我在扫描中包含了包。我想在共享项目中保留假客户端接口(interface)以定义可重用的“契约(Contract)”,并为每个项目都具有独特的包结构,而不是使用使用它的应用程序定义假客户端。

谢谢,韦斯。

最佳答案

您需要告诉 Feign 扫描器在哪里找到接口(interface)。

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

关于java - 从另一个项目注入(inject) FeignClient 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38863828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com