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]
为{{1} }
我可以在Jersey / JAX-RS或其他方便的方式做到这一点吗?
答案 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。