映射为@MatrixParameter的返回类型

时间:2013-05-16 10:07:21

标签: cxf jax-rs

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

然而,在我们的api中,我们有客户希望过滤的字段,这些字段在编译时没有定义(并且每个客户端可能不同)。这使得在@matrixParam注释上对这些字段进行speficy是不可行的。

所以我希望有一些方法可以使用Map作为接收'bean'对象

ie:当我在

上进行GET时
  

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

实施

1 个答案:

答案 0 :(得分: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}”)作为注释,它会使用路径参数干扰其他选择器。

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