JAX-RS / Jersey 中可变参数数组的路径段序列?

nec*_*cer 5 java rest jax-rs jersey jakarta-ee

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

有没有办法将未知数量的路径元素转换为 vararg Java 方法的参数? IE。/foo/bar/x/y/z应该转到方法:foo(@PathParam(...) String [] params) { ... }哪里params[0]is xparams[1]isyparams[2]isz

我可以在 Jersey/JAX-RS 或其他方便的方式中执行此操作吗?

esi*_*gel 4

不确定这是否正是您想要的,但您可以做这样的事情。

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

其中 VariableStrings 是您定义的类。

public class VariableStrings {

   private String[] splitPath;

   public VariableStrings(String unparsedPath) {
     splitPath = unparsedPath.split("/");
   }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我尚未检查此代码,因为它只是为了给您一个想法。这是可行的,因为 VariableStrings 可以被注入,因为它们的构造函数只接受一个 String。

查看文档

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

Coda Hale 给出了很好的概述