路径段序列到JAX-RS / Jersey中的vararg数组?

时间:2012-06-07 03:05:03

标签: java rest java-ee jersey jax-rs

JAX-RS / Jersey允许使用@PathParam注释将URL路径元素转换为Java方法参数。

有没有办法将未知数量的路径元素转换为vararg Java方法的参数? I. e。 /foo/bar/x/y/z应转到方法:foo(@PathParam(...) String [] params) { ... }其中params[0]xparams[1]yparams[2]为{{1} }

我可以在Jersey / JAX-RS或其他方便的方式做到这一点吗?

1 个答案:

答案 0 :(得分:4)

不确定这是否正是您所寻找的,但您可以这样做。

@Path("/foo/bar/{other: .*}
public Response foo(@PathParam("other") VariableStrings vstrings) {
   String[] splitPath = vstrings.getSplitPath();
   ...
}

其中VariableStrings是您定义的类。

public class VariableStrings {

   private String[] splitPath;

   public VariableStrings(String unparsedPath) {
     splitPath = unparsedPath.split("/");
   }
}

注意,我没有检查过这段代码,因为它只是为了给你一个想法。 这是有效的,因为VariableStrings可以由于它们的构造函数而被注入 只需要一个字符串。

查看docs

最后,作为使用@PathParam注释注入VariableString的替代方法 您可以将此逻辑包装到您自己的自定义Jersey提供程序中。此提供程序将以与上面相同的方式注入“VariableStrings”,但它看起来可能更清晰一些。不需要PathParam注释。

Coda Hale给出了一个很好的overview