JAX-RS / Jersey允许使用@PathParam注释将URL路径元素转换为Java方法参数.
有没有办法将未知数量的路径元素转换为vararg Java方法的参数? I. e. / foo / bar / x / y / z应该转到方法:foo(@PathParam(…)String [] params){…}其中params [0]是x,params [1]是y和params [2]是z
我可以在Jersey / JAX-RS或一些方便的方式做到这一点吗?
解决方法:
不确定这是否正是您所寻找的,但您可以做这样的事情.
@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.