JAX-RS:多条路径

时间:2011-01-24 15:57:25

标签: java jax-rs

是否可以做类似的事情?

import javax.ws.rs.GET;
import javax.ws.rs.Path;

public class xxx
{
  @GET
  @Path(value = "path1")
  public Response m1()
  {
    ...
  }

  @GET
  @Path(value = "path2")
  public Response m2()
  {
    ...
  }
}

我正在使用RESTEasy。

4 个答案:

答案 0 :(得分:74)

答案 1 :(得分:16)

是的,你可以这样做,虽然你必须重命名你的方法,以便他们的签名不同。

更新: 检查Dieter Cailliau的回答, @Path("/{a:path1|path2}") 可能就是您想要的......

public class BlahResource{
    @GET
    @Path("path1")
    public Response m1(){
        return Response.ok("blah").build();
    }

    @GET
    @Path("path2")
    public Response m2(){
        return this.m1();
}

你可以查看JSR-311的API及其名为“jersey”的参考实现:

JSR311 API

Jersey

答案 2 :(得分:10)

关于路径注释的一些额外细节......

作为先前的响应状态,正则表达式将在带注释的路径声明映射中使用:

{" variable-name [ ":" regular-expression ] "} 

您可以声明多个路径,但是还有一个路径层次结构对我来说不是很明显,其中类注释路径为前面的方法路径注释添加前缀。有人可能会为简洁的多路径选项编写以下类,这可能对资源版本控制很有用。

@Path("/{a:v1|v2}")
@Produces("text/*")
public class BlahResource {

    @GET
    @Path("/blah")
    public Response m1() {
        return Response.ok("blah").build();
    }
}

请注意,已使用路径“/ v1”或“/ v2”声明类“BlahResource”,使资源可访问为:

$ curl localhost:8080/v1/blah
blah

以及

$ curl localhost:8080/v2/blah
blah

答案 3 :(得分:0)

您可以使用子资源将两条路径映射到同一资源:

public class MySubResource {
    @GET
    public Response m1() {
        return Response.ok("blah").build();
    }
}

@Path("/root")
public class MyRootResource {

    @Path("/path1")
    public MySubResource path1() {
        return new MySubResource();
    }

    @Path("/path2")
    public MySubResource path2() {
        return new MySubResource();
    }
 }