使用旧版 REST 客户端
本指南介绍的是与 RESTEasy Classic 兼容的 REST 客户端。RESTEasy Classic 在 Quarkus 2.8 之前一直是默认的 Jakarta REST(前身为 JAX-RS)实现。 现在推荐使用 Quarkus REST(前身为 RESTEasy Reactive),它同样能够很好地支持传统的阻塞式工作负载和响应式工作负载。有关 Quarkus REST 的更多信息,请参阅 REST Client 指南,以及服务器端 REST JSON 入门指南 或更详细的 Quarkus REST 指南。 |
本指南将解释如何使用 RESTEasy REST 客户端,以便以极少的精力与 REST API 进行交互。
如果您需要编写服务器端 JSON REST API,还有另一份指南。 |
先决条件
要完成本指南,您需要
-
大约 15 分钟
-
一个 IDE
-
已安装 JDK 17+ 并正确配置了
JAVA_HOME
-
Apache Maven 3.9.9
-
如果您想使用它,可以选择 Quarkus CLI
-
如果您想构建本机可执行文件(或者如果您使用本机容器构建,则为 Docker),可以选择安装 Mandrel 或 GraalVM 并进行适当的配置
解决方案
我们建议您按照以下章节中的说明,逐步创建应用程序。但是,您可以直接转到完整的示例。
克隆 Git 仓库:git clone https://github.com/quarkusio/quarkus-quickstarts.git
,或下载 存档。
解决方案位于 resteasy-client-quickstart
目录中。
创建 Maven 项目
首先,我们需要一个新项目。使用以下命令创建一个新项目
对于 Windows 用户
-
如果使用 cmd,(不要使用反斜杠
\
并将所有内容放在同一行上) -
如果使用 Powershell,请将
-D
参数括在双引号中,例如"-DprojectArtifactId=resteasy-client-quickstart"
此命令生成一个带有 REST 端点的 Maven 项目,并导入
-
用于 REST 服务器支持的
resteasy
和resteasy-jackson
扩展; -
用于 REST 客户端支持的
resteasy-client
和resteasy-client-jackson
扩展。
如果您已经配置了 Quarkus 项目,可以通过在项目根目录下运行以下命令,将 resteasy-client
和 resteasy-client-jackson
扩展添加到您的项目中:
quarkus extension add resteasy-client,resteasy-client-jackson
./mvnw quarkus:add-extension -Dextensions='resteasy-client,resteasy-client-jackson'
./gradlew addExtension --extensions='resteasy-client,resteasy-client-jackson'
这会将以下内容添加到您的 pom.xml
中
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-client-jackson</artifactId>
</dependency>
implementation("io.quarkus:quarkus-resteasy-client")
implementation("io.quarkus:quarkus-resteasy-client-jackson")
设置模型
在本指南中,我们将演示如何使用 stage.code.quarkus.io 服务提供的 REST API 的一部分。我们的首要任务是设置模型,我们将使用一个 Extension
POJO 来表示。
创建一个 src/main/java/org/acme/rest/client/Extension.java
文件并包含以下内容:
package org.acme.rest.client;
import java.util.List;
public class Extension {
public String id;
public String name;
public String shortName;
public List<String> keywords;
}
上面的模型仅包含了服务提供的部分字段,但已足够本指南的目的。
创建接口
使用 RESTEasy REST 客户端就像创建使用适当的 Jakarta REST 和 MicroProfile 注释的接口一样简单。在本例中,接口应创建在 src/main/java/org/acme/rest/client/ExtensionsService.java
,并包含以下内容:
package org.acme.rest.client;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.jboss.resteasy.annotations.jaxrs.QueryParam;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.QueryParam;
import java.util.Set;
@Path("/extensions")
@RegisterRestClient
public interface ExtensionsService {
@GET
Set<Extension> getById(@QueryParam String id);
}
getById
方法使我们的代码能够通过 ID 从 Code Quarkus API 获取扩展。客户端将处理所有网络和编组工作,使我们的代码摆脱这些技术细节。
上面代码中注解的目的是以下几点
-
@RegisterRestClient
允许 Quarkus 知道此接口旨在作为 REST 客户端用于 CDI 注入 -
@Path
、@GET
和@QueryParam
是用于定义如何访问服务的标准 Jakarta REST 注释。
当安装了 JSON 扩展(如 如果您不希望默认使用 JSON,可以将 如果您不依赖 JSON 默认设置,强烈建议您为端点添加 |
路径参数
如果 GET 请求需要路径参数,您可以利用 @PathParam("parameter-name")
注释代替(或 إضافة إلى)@QueryParam
。如示例所示,可以根据需要组合路径和查询参数。
package org.acme.rest.client;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.jboss.resteasy.annotations.jaxrs.PathParam;
import org.jboss.resteasy.annotations.jaxrs.QueryParam;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import java.util.Set;
@Path("/extensions")
@RegisterRestClient
public interface ExtensionsService {
@GET
@Path("/stream/{stream}")
Set<Extension> getByStream(@PathParam String stream, @QueryParam("id") String id);
}
创建配置
为了确定将进行 REST 调用的基本 URL,REST 客户端使用 application.properties
中的配置。属性的名称需要遵循一定的约定,最好在以下代码中显示
# Your configuration properties
quarkus.rest-client."org.acme.rest.client.ExtensionsService".url=https://stage.code.quarkus.io/api # (1)
quarkus.rest-client."org.acme.rest.client.ExtensionsService".scope=jakarta.inject.Singleton # (2)
1 | 此配置意味着使用 ExtensionsService 执行的所有请求将使用 https://stage.code.quarkus.io 作为基本 URL。使用上述配置,调用 ExtensionsService 的 getById 方法并传入 io.quarkus:quarkus-resteasy-client 的值,将导致向 https://stage.code.quarkus.io/api/extensions?id=io.quarkus:quarkus-rest-client 发送 HTTP GET 请求。 |
2 | 此配置意味着 ExtensionsService 的默认作用域将是 @Singleton 。支持的作用域值包括 @Singleton 、@Dependent 、@ApplicationScoped 和 @RequestScoped 。默认作用域是 @Dependent 。还可以直接在接口上定义默认作用域。 |
请注意,org.acme.rest.client.ExtensionsService
必须与我们在上一节创建的 ExtensionsService
接口的完全限定名称匹配。
标准的 MicroProfile Rest Client 属性表示法也可用于配置客户端。
如果一个属性通过 Quarkus 表示法和 MicroProfile 表示法同时指定,Quarkus 表示法具有优先权。 |
为了方便配置,您可以使用 @RegisterRestClient
的 configKey
属性,它允许使用一个不同于接口完全限定名称的配置根。
@RegisterRestClient(configKey="extensions-api")
public interface ExtensionsService {
[...]
}
# Your configuration properties
quarkus.rest-client.extensions-api.url=https://stage.code.quarkus.io/api
quarkus.rest-client.extensions-api.scope=jakarta.inject.Singleton
禁用主机名验证
要为特定的 REST 客户端禁用 SSL 主机名验证,请将以下属性添加到您的配置中:
quarkus.rest-client.extensions-api.verify-host=false
此设置不应在生产环境中使用,因为它会禁用 SSL 主机名验证。 |
此外,您可以配置 REST 客户端以使用自定义主机名验证策略。您只需提供一个实现 javax.net.ssl.HostnameVerifier
接口的类,并将以下属性添加到您的配置中:
quarkus.rest-client.extensions-api.hostname-verifier=<full qualified custom hostname verifier class name>
Quarkus REST 客户端提供了一个嵌入式主机名验证策略来禁用主机名验证,名为 |
创建 Jakarta REST 资源
创建 src/main/java/org/acme/rest/client/ExtensionsResource.java
文件并包含以下内容:
package org.acme.rest.client;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.jboss.resteasy.annotations.jaxrs.PathParam;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import java.util.Set;
@Path("/extension")
public class ExtensionsResource {
@Inject
@RestClient
ExtensionsService extensionsService;
@GET
@Path("/id/{id}")
public Set<Extension> id(@PathParam String id) {
return extensionsService.getById(id);
}
}
请注意,除了标准的 CDI @Inject
注释外,我们还需要使用 MicroProfile @RestClient
注释来注入 ExtensionsService
。
更新测试
我们还需要更新功能测试以反映对端点的更改。编辑 src/test/java/org/acme/rest/client/ExtensionsResourceTest.java
文件,并将 testExtensionIdEndpoint
方法的内容更改为:
package org.acme.rest.client;
import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.greaterThan;
import org.acme.rest.client.resources.WireMockExtensionsResource;
import org.junit.jupiter.api.Test;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
@QuarkusTest
@QuarkusTestResource(WireMockExtensionsResource.class)
public class ExtensionsResourceTest {
@Test
public void testExtensionsIdEndpoint() {
given()
.when().get("/extension/id/io.quarkus:quarkus-rest-client")
.then()
.statusCode(200)
.body("$.size()", is(1),
"[0].id", is("io.quarkus:quarkus-rest-client"),
"[0].name", is("REST Client Classic"),
"[0].keywords.size()", greaterThan(1),
"[0].keywords", hasItem("rest-client"));
}
}
上面的代码使用了 REST Assured 的 json-path 功能。
重定向
HTTP 服务器可以通过发送以 "3" 开头的状态码响应和包含重定向 URL 的 HTTP 报头 "Location" 来将响应重定向到另一个位置。当 REST 客户端收到 HTTP 服务器的重定向响应时,它不会自动执行到新位置的请求。但是,您可以通过启用 "follow-redirects" 属性来启用自动重定向。
-
quarkus.rest-client.follow-redirects
用于启用所有 REST 客户端的重定向。 -
quarkus.rest-client.<client-prefix>.follow-redirects
用于启用特定 REST 客户端的重定向。
如果此属性为 true,则 REST 客户端将在收到 HTTP 服务器的重定向响应时执行新请求。
此外,我们还可以使用 "max-redirects" 属性限制重定向次数。
根据 RFC2616 规范,一个重要的注意事项是,默认情况下重定向仅会针对 GET 或 HEAD 方法发生。
异步支持
REST 客户端支持异步 REST 调用。异步支持有两种形式:您可以返回 CompletionStage
或 Uni
(需要 quarkus-resteasy-client-mutiny
扩展)。让我们通过在 ExtensionsService
REST 接口中添加一个 getByIdAsync
方法来实际演示。代码应如下所示:
package org.acme.rest.client;
import java.util.Set;
import java.util.concurrent.CompletionStage;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.jboss.resteasy.annotations.jaxrs.QueryParam;
@Path("/extensions")
@RegisterRestClient
public interface ExtensionsService {
@GET
Set<Extension> getById(@QueryParam String id);
@GET
CompletionStage<Set<Extension>> getByIdAsync(@QueryParam String id);
}
打开 src/main/java/org/acme/rest/client/ExtensionsResource.java
文件,并更新为以下内容:
package org.acme.rest.client;
import java.util.Set;
import java.util.concurrent.CompletionStage;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.jboss.resteasy.annotations.jaxrs.PathParam;
@Path("/extension")
public class ExtensionsResource {
@Inject
@RestClient
ExtensionsService extensionsService;
@GET
@Path("/id/{id}")
public Set<Extension> id(@PathParam String id) {
return extensionsService.getById(id);
}
@GET
@Path("/id-async/{id}")
public CompletionStage<Set<Extension>> idAsync(@PathParam String id) {
return extensionsService.getByIdAsync(id);
}
}
要测试异步方法,请在 ExtensionsResourceTest
中添加以下测试方法:
@Test
public void testExtensionIdAsyncEndpoint() {
given()
.when().get("/extension/id-async/io.quarkus:quarkus-rest-client")
.then()
.statusCode(200)
.body("$.size()", is(1),
"[0].id", is("io.quarkus:quarkus-rest-client"),
"[0].name", is("REST Client Classic"),
"[0].keywords.size()", greaterThan(1),
"[0].keywords", hasItem("rest-client"));
}
Uni
版本非常相似。
package org.acme.rest.client;
import java.util.Set;
import java.util.concurrent.CompletionStage;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.jboss.resteasy.annotations.jaxrs.QueryParam;
import io.smallrye.mutiny.Uni;
@Path("/extensions")
@RegisterRestClient
public interface ExtensionsService {
// ...
@GET
Uni<Set<Extension>> getByIdAsUni(@QueryParam String id);
}
ExtensionsResource
变为:
package org.acme.rest.client;
import java.util.Set;
import java.util.concurrent.CompletionStage;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.jboss.resteasy.annotations.jaxrs.PathParam;
import io.smallrye.mutiny.Uni;
@Path("/extension")
public class ExtensionsResource {
@Inject
@RestClient
ExtensionsService extensionsService;
// ...
@GET
@Path("/id-uni/{id}")
public Uni<Set<Extension>> idMutiny(@PathParam String id) {
return extensionsService.getByIdAsUni(id);
}
}
Mutiny
前面的代码片段使用了 Mutiny 响应式类型。如果您不熟悉 Mutiny,请查看 Mutiny - 一个直观的响应式编程库。 |
返回 Uni
时,每次订阅都会调用远程服务。这意味着您可以通过重新订阅 Uni
来重新发送请求,或使用 retry
,如下所示:
@Inject @RestClient ExtensionsService extensionsService;
// ...
extensionsService.getByIdAsUni(id)
.onFailure().retry().atMost(10);
如果您使用 CompletionStage
,则需要调用服务的方法来重试。此差异源于 Mutiny 的惰性特性及其订阅协议。有关更多详细信息,请参阅 Mutiny 文档。
自定义头支持
MicroProfile REST 客户端允许通过使用 @RegisterClientHeaders
注释注册 ClientHeadersFactory
来修改请求头。
让我们通过在 ExtensionsService
REST 接口中添加一个指向 RequestUUIDHeaderFactory
类的 @RegisterClientHeaders
注释来演示此功能:
package org.acme.rest.client;
import java.util.Set;
import java.util.concurrent.CompletionStage;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.jboss.resteasy.annotations.jaxrs.QueryParam;
import io.smallrye.mutiny.Uni;
@Path("/extensions")
@RegisterRestClient
@RegisterClientHeaders(RequestUUIDHeaderFactory.class)
public interface ExtensionsService {
@GET
Set<Extension> getById(@QueryParam String id);
@GET
CompletionStage<Set<Extension>> getByIdAsync(@QueryParam String id);
@GET
Uni<Set<Extension>> getByIdAsUni(@QueryParam String id);
}
RequestUUIDHeaderFactory
如下所示:
package org.acme.rest.client;
import org.eclipse.microprofile.rest.client.ext.ClientHeadersFactory;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.ws.rs.core.MultivaluedHashMap;
import jakarta.ws.rs.core.MultivaluedMap;
import java.util.UUID;
@ApplicationScoped
public class RequestUUIDHeaderFactory implements ClientHeadersFactory {
@Override
public MultivaluedMap<String, String> update(MultivaluedMap<String, String> incomingHeaders, MultivaluedMap<String, String> clientOutgoingHeaders) {
MultivaluedMap<String, String> result = new MultivaluedHashMap<>();
result.add("X-request-uuid", UUID.randomUUID().toString());
return result;
}
}
如上例所示,您可以通过用作用域定义注释(如 @Singleton
、@ApplicationScoped
等)来使 ClientHeadersFactory
实现成为 CDI bean。
默认头工厂
您也可以使用不带自定义工厂的 @RegisterClientHeaders
注释。在这种情况下,将使用 DefaultClientHeadersFactoryImpl
工厂,并且 org.eclipse.microprofile.rest.client.propagateHeaders
配置属性中列出的所有头都将被添加。单个头名称是逗号分隔的。
@Path("/extensions")
@RegisterRestClient
@RegisterClientHeaders
public interface ExtensionsService {
@GET
Set<Extension> getById(@QueryParam String id);
@GET
CompletionStage<Set<Extension>> getByIdAsync(@QueryParam String id);
@GET
Uni<Set<Extension>> getByIdAsUni(@QueryParam String id);
}
org.eclipse.microprofile.rest.client.propagateHeaders=Authorization,Proxy-Authorization
打包并运行应用程序
使用以下命令运行应用程序
quarkus dev
./mvnw quarkus:dev
./gradlew --console=plain quarkusDev
您应该会看到一个 JSON 对象,其中包含有关 REST Client 扩展的一些基本信息。
与往常一样,可以使用以下命令打包应用程序
quarkus build
./mvnw install
./gradlew build
并使用 java -jar target/quarkus-app/quarkus-run.jar
执行。
您还可以使用以下命令生成原生可执行文件
quarkus build --native
./mvnw install -Dnative
./gradlew build -Dquarkus.native.enabled=true
REST Client 和 RESTEasy 交互
在 Quarkus 中,REST Client 扩展和 RESTEasy 扩展 共享相同的底层基础设施。这一考虑的一个重要结果是它们共享相同的提供程序列表(在 Jakarta REST 的术语中)。
例如,如果您声明了一个 WriterInterceptor
,它默认会拦截服务器调用和客户端调用,这可能不是期望的行为。
但是,您可以通过添加 @ConstrainedTo(RuntimeType.CLIENT)
注释到提供程序来更改此默认行为并限制提供程序:
-
仅考虑客户端调用,方法是向您的提供程序添加
@ConstrainedTo(RuntimeType.CLIENT)
注释; -
仅考虑服务器调用,方法是向您的提供程序添加
@ConstrainedTo(RuntimeType.SERVER)
注释。
为测试使用模拟 HTTP 服务器
在某些情况下,您可能希望模拟远程端点(HTTP 服务器),而不是模拟客户端本身。这对于原生测试或以编程方式创建的客户端尤其有用。
您可以使用 Wiremock 轻松模拟 HTTP 服务器。Quarkus - 使用 REST Client 的 Wiremock 部分 详细描述了如何进行设置。
配置参考
构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖
配置属性 |
类型 |
默认 |
---|---|---|
如果为 true,则扩展将自动删除路径中任何尾部的斜杠。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
布尔值 |
|
表单数据编码的模式。可能的值为 默认情况下,Rest Client Reactive 使用 RFC1738。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
一个字符串值,格式为 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
字符串 |
|
代理用户名,等效于 http.proxy 或 https.proxy JVM 设置。 可以被特定于客户端的设置覆盖。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
代理密码,等效于 http.proxyPassword 或 https.proxyPassword JVM 设置。 可以被特定于客户端的设置覆盖。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
要访问而不使用代理的主机,类似于 http.nonProxyHosts 或 https.nonProxyHosts JVM 设置。 请注意,与 JVM 设置不同,此属性默认情况下为空。 可以被特定于客户端的设置覆盖。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
REST 客户端应等待连接到远程端点的超时时间(以毫秒为单位)。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
long |
|
REST 客户端应等待来自远程端点响应的超时时间(以毫秒为单位)。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
long |
|
如果为 true,则在客户端调用期间发生异常时,REST 客户端将不会提供额外的上下文信息(例如 REST 客户端类和方法名称)。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
布尔值 |
|
用于所有 REST 客户端的 HTTP user-agent 标头的默认配置。 可以被特定于客户端的设置覆盖。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
应应用于 rest 客户端所有请求的 HTTP 标头。 环境变量: 显示更多 |
Map<String,String> |
|
主机名验证器的类名。 该类必须具有一个公共的无参数构造函数。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
字符串 |
|
连接在连接池中保持未使用状态的时间(以毫秒为单位),然后被驱逐和关闭。 超时 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
整数 |
|
此客户端的连接池的大小。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
整数 |
|
如果设置为 false,则完全禁用 keep alive。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
布尔值 |
|
请求可以遵循的最大重定向次数。 可以被特定于客户端的设置覆盖。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
整数 |
|
一个布尔值,用于确定客户端是否应遵循 HTTP 重定向响应。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
布尔值 |
|
要包含在客户端中的完全限定的提供程序类名。 等效于 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
字符串 |
|
用于注入 REST 客户端实例的 CDI 范围。 值可以是 CDI 范围注释的完全限定类名(例如“jakarta.enterprise.context.ApplicationScoped”)或其简单名称(例如“ApplicationScoped”)。 rest-client 扩展的默认范围是“Dependent”(这是符合规范的行为)。 rest-client-reactive 扩展的默认范围是“ApplicationScoped”。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
字符串 |
|
一个枚举类型字符串值,可能的值为“MULTI_PAIRS”(默认)、“COMMA_SEPARATED”或“ARRAY_PAIRS”,用于指定使用相同查询参数的多个值的格式。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
|
|
设置是否启用主机名验证。 默认已启用。 不应在生产环境中禁用此设置,因为它会使客户端容易受到 MITM 攻击。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
布尔值 |
|
信任存储位置。 可以指向类路径资源或文件。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
字符串 |
|
信任存储密码。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
字符串 |
|
信任存储的类型。 默认为“JKS”。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
字符串 |
|
密钥存储位置。 可以指向类路径资源或文件。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
字符串 |
|
密钥存储密码。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
字符串 |
|
密钥存储的类型。 默认为“JKS”。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
字符串 |
|
要使用的 TLS 配置的名称。 如果配置了名称,则它使用来自 如果未设置命名的 TLS 配置,则将使用 key-store、trust-store 等属性。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
布尔值 |
|
|
配置 HTTP/2 升级聚合内容的最大长度(以字节为单位)。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
|
|
配置两件不同的事情
可以被特定于客户端的设置覆盖。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
|
|
支持接收 GZIP 压缩的消息。启用此功能后,如果服务器返回的响应包含 此属性不适用于 RESTEasy Client。 可以被特定于客户端的设置覆盖。 环境变量: 显示更多 |
布尔值 |
|
如果启用了应用层协议协商,客户端将在服务器公开的协议之上协商要使用的协议。默认情况下,它将首先尝试使用 HTTP/2,如果不可用,则使用 HTTP/1.1。当 环境变量: 显示更多 |
布尔值 |
|
如果为 环境变量: 显示更多 |
布尔值 |
|
客户端的日志记录范围。
此属性仅适用于响应式 REST 客户端。 环境变量: 显示更多 |
字符串 |
|
应记录正文的多少个字符。 消息正文可能很大,并且很容易污染日志。 默认情况下,设置为 100。 此属性仅适用于响应式 REST 客户端。 环境变量: 显示更多 |
整数 |
|
用于注入的 CDI 作用域。此属性可以包含 CDI 作用域注释的完全限定类名(例如 "jakarta.enterprise.context.ApplicationScoped")或其简单名称(例如 "ApplicationScoped")。默认情况下,此属性未设置,这意味着除非接口被 环境变量: 显示更多 |
字符串 |
|
如果设置为 true,则 Quarkus 将确保来自 REST 客户端的所有调用都通过本地代理服务器(由 Quarkus 管理)。 这对于捕获到使用 HTTPS 服务的网络流量非常有用。 此属性不适用于 RESTEasy Client,仅适用于 Quarkus REST 客户端(以前的 RESTEasy Reactive 客户端)。 此属性仅适用于开发和测试模式。 环境变量: 显示更多 |
布尔值 |
|
如果存在多个代理提供程序,则使用此设置来选择要使用的代理提供程序。 它仅在 在多个提供程序之间进行选择的算法如下
环境变量: 显示更多 |
字符串 |
|
如果为 true,则扩展将自动删除路径中任何尾部的斜杠。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
布尔值 |
|
用于此服务的基本 URL。 除非在 环境变量: 显示更多 |
字符串 |
|
用于此服务的基本 URI。 除非在 环境变量: 显示更多 |
字符串 |
|
此属性仅用于高级配置设置,以覆盖为 uri 或 url 设置的任何值。 覆盖是使用 REST Client 类名配置语法完成的。 此属性不适用于 RESTEasy Client,仅适用于 Quarkus Rest 客户端(以前的 RESTEasy Reactive 客户端)。 环境变量: 显示更多 |
字符串 |
|
Map,其中键是要包含在客户端中的完全限定的提供程序类名,值是它们的整数优先级。 等效于 环境变量: 显示更多 |
字符串 |
|
等待连接到远程端点的超时时间(以毫秒为单位)。 环境变量: 显示更多 |
long |
|
等待来自远程端点响应的超时时间(以毫秒为单位)。 环境变量: 显示更多 |
long |
|
一个布尔值,用于确定客户端是否应遵循 HTTP 重定向响应。 环境变量: 显示更多 |
布尔值 |
|
表单数据编码的模式。可能的值为 默认情况下,Rest Client Reactive 使用 RFC1738。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
一个字符串值,格式为 使用 环境变量: 显示更多 |
字符串 |
|
代理用户名。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
代理密码。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
要访问而不使用代理的主机 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
一个枚举类型字符串值,可能的值为“MULTI_PAIRS”(默认)、“COMMA_SEPARATED”或“ARRAY_PAIRS”,用于指定使用相同查询参数的多个值的格式。 环境变量: 显示更多 |
|
|
设置是否启用主机名验证。 默认已启用。 不应在生产环境中禁用此设置,因为它会使客户端容易受到 MITM 攻击。 环境变量: 显示更多 |
布尔值 |
|
信任存储位置。 可以指向类路径资源或文件。 环境变量: 显示更多 |
字符串 |
|
信任存储密码。 环境变量: 显示更多 |
字符串 |
|
信任存储的类型。 默认为“JKS”。 环境变量: 显示更多 |
字符串 |
|
密钥存储位置。 可以指向类路径资源或文件。 环境变量: 显示更多 |
字符串 |
|
密钥存储密码。 环境变量: 显示更多 |
字符串 |
|
密钥存储的类型。 默认为“JKS”。 环境变量: 显示更多 |
字符串 |
|
主机名验证器的类名。 该类必须具有一个公共的无参数构造函数。 环境变量: 显示更多 |
字符串 |
|
要使用的 TLS 配置的名称。 如果配置了名称,则它使用来自 如果未设置命名的 TLS 配置,则将使用 key-store、trust-store 等属性。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
连接在连接池中保持未使用状态的时间(以毫秒为单位),然后被驱逐和关闭。 超时 环境变量: 显示更多 |
整数 |
|
此客户端的连接池的大小。 环境变量: 显示更多 |
整数 |
|
如果设置为 false,则完全禁用 keep alive。 环境变量: 显示更多 |
布尔值 |
|
请求可以遵循的最大重定向次数。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
整数 |
|
应应用于 rest 客户端所有请求的 HTTP 标头。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
Map<String,String> |
|
设置为 true 以在 REST 客户端之间共享 HTTP 客户端。可以有多个共享客户端,通过名称来区分,当没有设置特定名称时,使用名称 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
布尔值 |
|
设置 HTTP 客户端名称,当客户端被共享时使用,否则忽略。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
配置要使用的 HTTP user-agent 标头。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
字符串 |
|
如果为 true,则将启用 HTTP/2。 环境变量: 显示更多 |
布尔值 |
|
配置 HTTP/2 升级聚合内容的最大长度(以字节为单位)。 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
|
|
配置两件不同的事情
此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
|
|
支持接收 GZIP 压缩的消息。启用此功能后,如果服务器返回的响应包含 此属性不适用于 RESTEasy Client。 环境变量: 显示更多 |
布尔值 |
|
如果启用了应用层协议协商,客户端将在服务器公开的协议之上协商要使用的协议。默认情况下,它将首先尝试使用 HTTP/2,如果不可用,则使用 HTTP/1.1。当 环境变量: 显示更多 |
布尔值 |
|
如果为 环境变量: 显示更多 |
布尔值 |
|
如果设置为 环境变量: 显示更多 |
布尔值 |
|
客户端的日志记录范围。
此属性仅适用于响应式 REST 客户端。 环境变量: 显示更多 |
字符串 |
|
应记录正文的多少个字符。 消息正文可能很大,并且很容易污染日志。 默认情况下,设置为 100。 此属性仅适用于响应式 REST 客户端。 环境变量: 显示更多 |
整数 |
|
关于 MemorySize 格式
大小配置选项识别以下格式的字符串(显示为正则表达式): 如果未给出后缀,则假定为字节。 |