我需要从 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 接收。
有办法做到吗?
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);
}
}
使用
@RegisterRestClient
注释创建的客户端无法实现此目的
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
}