如何在Quarkus @RegisterRestClient中发送带请求体的GET请求?
解决RESTEasy客户端发送带请求体的GET请求报错问题
RESTEasy默认会拦截带请求体的GET请求,抛出你遇到的RESTEASY004565: A GET request cannot have a body异常。针对无法修改的远程服务,可通过以下两种方案解决:
方案1:通过配置属性禁用GET请求体校验
RESTEasy提供了专属配置属性关闭这个检查,针对你当前使用的Jakarta EE版本(jakarta.ws.rs包),只需启用resteasy.allow_get_method_with_body属性:
配置方式1:通过ClientBuilder代码设置
Client client = ClientBuilder.newBuilder() .property("resteasy.allow_get_method_with_body", true) .build();
配置方式2:通过配置文件(如Spring Boot的application.properties)
如果是Spring Boot环境,直接在配置文件中添加:
resteasy.allow_get_method_with_body=true
方案2:手动构建GET请求(配置失效时备用)
如果上述配置未生效,可以绕过注解方式,手动构建GET请求并写入请求体:
Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://your-remote-service/SomeRemoteEndpoint"); // 初始化请求体DTO SomeDto someDto = new SomeDto(); // 填充DTO数据 // 构建请求并设置Header Invocation.Builder requestBuilder = target.request() .header("Authorization", "your-auth-token"); // 手动发送带请求体的GET请求 Response response = requestBuilder.method("GET", Entity.json(someDto));
注意事项
- 该配置仅绕过RESTEasy客户端的校验,需确保远程服务确实支持接收带请求体的GET请求,部分服务端框架可能仍会拒绝此类请求
- HTTP规范中GET请求带请求体的行为属于未定义范畴,不建议在自有服务中采用这种设计
内容的提问来源于stack exchange,提问作者dsestini
相关产品推荐
相关产品推荐

