You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus REST Jackson客户端POST请求发送空负载问题

Quarkus REST Client v3.13.2 POST请求体丢失问题

问题背景

从quarkus-resteasy迁移至quarkus-rest v3.13.2客户端后,发现REST客户端仅发送GET参数,完全忽略POST请求体。本地JVM(非原生)DEV模式测试时,日志显示请求体为空,但已确认传入的DTO字段均非空。


相关代码

客户端接口(Swagger生成,手动添加注解)

@Path("/api/v/2024-03-20")
public interface ResourceClient {
    @POST
    @Path("resource")
    CreateResourceResponse createResource(CreateResource body);
}

请求DTO(Swagger生成)

@ApiModel(description = "The `createResource` request.")
@jakarta.annotation.Generated(value = "io.swagger.codegen.languages.JavaClientCodegen", date = "2024-06-12T12:45:38.427+02:00")
@RegisterForReflection
public class CreateResourceRequest {
  @JsonProperty("dataList")
  private List<String> dataList = new ArrayList<>();

  @JsonProperty("items")
  private List<ItemInput> items = new ArrayList<>();
}

客户端初始化代码

@Provides
public ResourceClient getClient(/.../) {
        return QuarkusRestClientBuilder.newBuilder()
                .baseUri(URI.create(uri))
                .queryParamStyle(QueryParamStyle.COMMA_SEPARATED)
                .register(ExceptionMapper.class)
                .build(ResourceClient.class);
}

依赖配置(pom.xml)

<!-- REST clients generation -->
<dependency>
    <!--
      * If your application uses a client and exposes REST endpoints,
        please use Quarkus REST for the server part.
      * Please note that the quarkus-resteasy-client extension may not be used with Quarkus REST,
        use quarkus-rest-client instead.
     -->
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-rest-client</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-rest-jackson</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-rest-client-jackson</artifactId>
</dependency>
<dependency>
    <!-- Generates rest API handler lambda (YES I USE REST SERVER AND CLIENT IN THE SAME SUB-MODULE -->
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-amazon-lambda-rest</artifactId>
</dependency>

日志配置(application-dev.properties)

quarkus.rest-client.logging.scope=request-response
quarkus.rest-client.logging.body-limit=1024
quarkus.log.category."org.jboss.resteasy.reactive.client.logging".level=DEBUG

问题现象

日志输出明确显示请求体为空,content-length=0:

(vert.x-eventloop-thread-0) Request: POST https://. .... content-length=0], Empty body


解决方法

  1. 添加请求体注解:Quarkus REST Client(基于Resteasy Reactive)要求显式标注请求体参数,在客户端接口的参数上添加@Body注解:
@POST
@Path("resource")
CreateResourceResponse createResource(@Body CreateResource body);

旧版quarkus-resteasy-client可能隐式处理请求体,但Quarkus REST(Resteasy Reactive)必须通过@Body明确声明请求体参数。

  1. 校验DTO类型匹配:确认接口方法中的参数类型CreateResource与实际传入的CreateResourceRequest为同一类型(或存在正确的映射关系),避免因类型不匹配导致序列化失败。

  2. 验证依赖有效性:确保quarkus-rest-client-jackson依赖正确引入,该依赖负责将Java对象序列化为JSON请求体,缺失会导致无法处理请求体序列化。

内容的提问来源于stack exchange,提问作者Eugene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:50:14