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

如何在Quarkus中以POJO对象传递GET查询参数?

解决Quarkus中用Record/POJO接收GET查询参数的问题

正确实现方案

要在Quarkus(基于Resteasy Reactive)中用对象接收GET查询参数,需要结合@BeanParam和@QueryParam(或Quarkus简化的@RestQuery),具体实现如下:

1. 资源类代码

在方法参数上保留@BeanParam注解,告知Quarkus从请求查询参数中解析该对象:

@Path("/example")
public class ExampleResource {

  @GET
  public List<String> search(@BeanParam ExampleSearchParams params) {
    Log.info(params);
    return List.of();
  }

}

2. Record类代码

为record的每个构造参数添加@QueryParam(或@RestQuery)注解,明确对应URL中的查询参数:

import jakarta.ws.rs.QueryParam;

public record ExampleSearchParams(
  @QueryParam("searchQuery") String searchQuery,
  @QueryParam("size") Integer size,
  @QueryParam("from") Integer from
) {
}

如果使用Quarkus提供的@RestQuery简化注解,代码可改为:

import io.quarkus.resteasy.reactive.RestQuery;

public record ExampleSearchParams(
  @RestQuery String searchQuery,
  @RestQuery Integer size,
  @RestQuery Integer from
) {
}

注:当查询参数名与record字段名完全一致时,@RestQuery和@QueryParam可省略参数名,框架会自动匹配。


之前尝试失败的原因

  • 无注解直接传对象:Quarkus默认会把无注解的方法参数当作请求体解析,但GET请求没有请求体,因此返回415(不支持的媒体类型)错误。
  • 仅加@BeanParam未标记字段:@BeanParam需要明确每个字段的参数来源,否则CDI容器会尝试注入字段的依赖,导致“Unsatisfied dependency”启动错误。
  • 仅在record加@RestQuery:缺少@BeanParam标记方法参数,CDI依然会尝试注入record实例,而非从查询参数解析。
  • 直接在方法参数加@RestQuery:@RestQuery仅用于单个查询参数,无法直接解析为复杂对象,因此报错“无法创建转换器”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:53:21