Quarkus中@RegisterRestClient不识别及方法可见性问题
问题解决方案
核心问题1:Rest Client必须定义为接口
MicroProfile Rest Client规范要求客户端必须是接口而非类,你当前将OffersRestClientService定义为class,这是@RegisterRestClient不被识别的根本原因。修改代码将class改为interface:
package org.offerService.infrastructure; import java.util.concurrent.CompletionStage; import javax.ws.rs.POST; import javax.ws.rs.Path; import org.LeadsService.contract.offerDto.OfferDto; import org.LeadsService.contract.reponseType.responseTypeOffer.ResponseCreateOffer; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @Path("/offer") @RegisterRestClient(configKey = "offer-api") public interface OffersRestClientService { // 改为interface @POST @Path("/createOffer") CompletionStage<ResponseCreateOffer> createOffer(OfferDto offer); }
核心问题2:方法访问权限不足
createOffer方法未指定访问修饰符,默认是包级访问权限,跨包注入调用时会触发「方法不可见」错误。给方法添加public修饰符:
@POST @Path("/createOffer") public CompletionStage<ResponseCreateOffer> createOffer(OfferDto offer); // 增加public
额外修正项
- 包名大小写统一:警告中出现的
org.OfferService与代码里的org.offerService大小写不一致,确保注入时引用的类名、包名完全匹配,避免大小写导致的类查找失败。 - 补全配置URL协议头:
application.properties中的服务地址需添加http://,否则Quarkus无法正确解析:
quarkus.rest-client.offer-api.url=http://localhost:8082
- 正确注入客户端:注入时需同时使用
@Inject和@RestClient注解:
@Inject @RestClient OffersRestClientService offerRestClient;
完成上述修改后重新编译运行,警告和错误即可消除。
内容的提问来源于stack exchange,提问作者MansouriAla
相关产品推荐
相关产品推荐

