JAX-RS:多个path

有没有可能做这样的事情?

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。

是的,你可以做到这一点,虽然你将不得不重新命名你的方法,使他们的签名是不同的。

更新: 检查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

新泽西

 @Path("/{a:path1|path2}") 

从resteasy文档: http ://docs.jboss.org/resteasy/docs/1.0.2.GA/userguide/html_single/index.html#_Path_and_regular_expression_mappings

关于path注释的一些额外细节…

作为之前的响应状态,在注释的path声明映射中使用正则expression式:

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

您可以声明多个path,但是也有一个path层次结构对我来说不是很明显,因此类注释path为以下方法path注释添加了前缀。 有人可能会写一个简洁的多path选项下面的类,这可能是有用的资源版本。

 @Path("/{a:v1|v2}") @Produces("text/*") public class BlahResource { @GET @Path("/blah") public Response m1() { return Response.ok("blah").build(); } } 

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

 $ curl localhost:8080/v1/blah blah 

并且

 $ curl localhost:8080/v2/blah blah