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