Java JAX-RS:多路径
有可能做那样的事吗Java JAX-RS:多路径,java,jax-rs,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 m1() { ... } } 顺便说一句
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 m1()
{
...
}
}
顺便说一句,我正在使用RESTEasy。是的,您可以这样做,尽管您必须重命名您的方法,以便它们的签名不同 更新:检查Dieter Cailliau的答案,
@Path(“/{a:path1 | path2}”)
可能就是你想要的
您可以查看JSR-311的API及其名为“jersey”的参考实现:
从resteasy文档:
有关路径注释的一些额外详细信息 作为先前的响应状态,要在带注释的路径声明映射中使用的正则表达式:
{" 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
您可以使用子资源将两条路径映射到同一资源:
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();
}
}
也可以使用resteasy?实际上,没有理由认为您的答案不好,事实上,我认为它比这里的大多数方法都好,因为这两种方法可以委托给负责完成工作的单个服务。这使您的代码更易于维护。如果有人感兴趣,我在jersey(jax rs)上尝试了这一点,并且效果很好。@jax-rs(JSR-339)规范(至少在版本2.0中)中指定了路径正则表达式支持,因此任何实现都应该支持它。如果您使用复合路径,我必须避免使用类似的斜杠{a:path1\\/subPath1 | path2\\\/subPath2}你知道我如何使斜杠“/”可选吗?这意味着它要么匹配“/abc”,要么不匹配。我想匹配“/”或“/path”。这里可以找到有点混乱的JAX-RS API规范。目前,swagger不支持它。我假设你想要两条路径指向同一个方法?
$ curl localhost:8080/v2/blah
blah
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();
}
}