使用 Quarkus 和 Resteasy 在运行时定义客户端目标 URL

问题描述 投票:0回答:2

我需要从 Quarkus 应用程序发送 HTTP 请求。按照本指南,我有这个 RestClient:

@Path("/v1")
@RegisterRestClient
public interface CountriesService {

    @GET
    @Path("/name/{name}")
    Set<Country> getByName(@PathParam String name);
}

Path
注释中,我可以配置路径。但是要调用的域/url 是在配置文件中定义的,根据本段

# Your configuration properties
org.acme.rest.client.CountriesService/mp-rest/url=https://restcountries.eu/rest # 
org.acme.rest.client.CountriesService/mp-rest/scope=javax.inject.Singleton #

就我而言,我需要在运行时以编程方式定义此 URL,因为我将其作为回调 URL 接收。

有办法做到吗?

java resteasy quarkus
2个回答
8
投票

Quarkus Rest Client 和 Quarkus Rest Client Reactive,实现 MicroProfile Rest 规范,因此允许以编程方式使用 RestClientBuilder 创建客户端

stubs
,例如:

public class SomeService {
   public Response doWorkAgainstApi(URI apiUri, ApiModel apiModel) {
       RemoteApi remoteApi = RestClientBuilder.newBuilder()
            .baseUri(apiUri)
            .build(RemoteApi.class);
       return remoteApi.execute(apiModel);
   }
}

请参阅 https://download.eclipse.org/microprofile/microprofile-rest-client-2.0/microprofile-rest-client-spec-2.0.html#_sample_builder_usage

使用

@RegisterRestClient
注释创建的客户端无法实现此目的


0
投票

Quarkus 3.16 版本使这成为可能。您可以在方法参数上使用注释

@io.quarkus.rest.client.reactive.Url

此功能的官方文档目前有点短,但您在官方测试中找到了一个很好的示例:UrlOnStringParameterTest.java。看起来像这样:

@Path("test")
@RegisterRestClient
public interface Client {

    @Path("count")
    @GET
    String test(@Url String uri);
}

// called via...

@RestClient
Client client;

public void callCustomUrl(String yourCustomUrl) {
    String result = client.test(yourCustomUrl);
    // do stuff
}
© www.soinside.com 2019 - 2024. All rights reserved.