0

我们正在构建的 Rest-api 需要某种过滤系统来防止将过多(无用)数据传输到我们的客户端。@MatrixParameter 的使用似乎是一个不错的解决方案,因为这允许以一种可读的方式过滤 URI 的多个“级别”

但是,在我们的 api 中,我们有客户想要过滤的字段,这些字段未在编译时定义(并且每个客户端可能不同)。这使得在 @matrixParam 注释上指定这些字段是不可行的。

所以我希望有某种方法可以使用 Map 作为接收“bean”对象

即:当我做一个 GET on

https://api.example.com/rest/filtered_get;param1=value1;param2=value2/optional/continuation/of/uri/

最终会在包含 param1,param2 作为键和 value1 和 value2 作为值的映射中结束

@Get()
@Path("filtered_get")
public Response getter(@matrixParam("") HashMap<String, String/Object>parameters) {
    //doStuffWiththeParameters;
}

该服务正在使用 cxf 实施

4

1 回答 1

0

我想我已经弄清楚了。

诀窍是使用 PathSegment 变量

像这样使用代码:

@Path("/filter{reference_to_pathParam}")
public RestEntityService<T> search(@PathParam("reference_to_pathParam") PathSegment p) {
MultiValuedMap<String,String> matrix = p.getMatrixParameters();
// doStuff with the matrix parameters
}

允许您在 URI 中使用未指定的矩阵参数,例如:

https://api.example.com/rest/../filter;field=value;field2=value2/rest/of/the/URI/

并在矩阵(地图)中获取这些字段

请注意,我为此过滤器使用了显式路径段。这是因为如果我使用 @path("/{filter}") 之类的东西作为注释,它会干扰使用路径参数的其他选择器。

尚未将此标记为答案,因为我不知道是否有更好/更清洁的方法来做到这一点。

于 2013-05-16T13:06:07.103 回答