resteasy: @QueryParam 解析嵌套数组结构

resteasy: @QueryParam to parse nested array structure

我正在使用一个名为 tabulator 的 javascript 库在客户端的表格中显示数据。

Tabulator js 库提供了一种功能,可以在 ajax 请求的查询参数中对 filters 的表示形式进行编码。例如,查询参数如下所示:

https://host/myEndpoint?size=10&page=1&filters%5B0%5D%5Bfield%5D=username&filters%5B0%5D%5Btype%5D=like&filters%5B0%5D%5Bvalue%5D=filteredBy

这是相同的 url 解码:

https://host/myEndpoint?size=10&page=1&filters[0][field]=username&filters[0][type]=like&filters[0][value]=filteredBy

如果可能的话,我想要一个这样的 Resteasy 端点:

 @GET
 @Path("/myEndpoint")
 @Consumes("application/json")
 @Produces("application/json")
 public Response myEndpoint(@QueryParam("page") Integer page,
                            @QueryParam("size") Integer size,
                            @QueryParam("filters") List<Filter> filters) {

resteasy 解释 pagesize 没问题,但是 filters 总是一个大小为 0 的列表。

我的 Filter bean 有 3 个名为 fieldtypevalue 的字段,其构造函数具有单个 String 参数,如 [=24] 所述=].

但是resteasy似乎没有识别和解析filters查询参数?是否可以在resteasy中解析这种嵌套数组结构的查询参数?

  filters[0][field]=username&filters[0][type]=like&filters[0][value]=filteredB

我仍然希望有更好的方法,但这里有一个至少目前对我有用的可能解决方案:

 @GET
 @Path("/myEndpoint")
 @Consumes("application/json")
 @Produces("application/json")
 public Response myEndpoint(@QueryParam("page") Integer page,
                            @QueryParam("size") Integer size,
                            @Context UriInfo uriInfo) {
    
    for(String key : uriInfo.getQueryParameters().keySet()) {
        
         // check if key starts with something like `filters[0]` 
         // and then parse it however you need. 
    }
 }