是否可以做类似的事情?
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。
答案 0 :(得分:74)
@Path("/{a:path1|path2}")
来自resteasy docs: http://docs.jboss.org/resteasy/docs/1.0.2.GA/userguide/html_single/index.html#_Path_and_regular_expression_mappings
答案 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”的参考实现:
答案 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();
}
}