Reputation: 775
Is it possible to do something like that?
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()
{
...
}
}
I'm using RESTEasy btw.
Upvotes: 57
Views: 57578
Reputation: 4800
You could use sub resources to map two paths to the same resource:
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();
}
}
Upvotes: 0
Reputation: 1517
Some extra details about Path annotation...
As a previous responses state, regular expressions to be used with in the annotated path declaration mapping:
{" variable-name [ ":" regular-expression ] "}
You can declare multiple paths, but there is also a path hierarchy that was not immediately obvious to me whereby the class annotated path prefixes the following method path annotations. One might write the following class for a concise multiple path option which could be useful for resource versioning perhaps.
@Path("/{a:v1|v2}")
@Produces("text/*")
public class BlahResource {
@GET
@Path("/blah")
public Response m1() {
return Response.ok("blah").build();
}
}
Please note the fact that the class "BlahResource" has been declared with the path "/v1" or "/v2" making the resource accessible as:
$ curl localhost:8080/v1/blah
blah
and also
$ curl localhost:8080/v2/blah
blah
Upvotes: 13
Reputation: 17761
yes you can do that although you will have to rename your methods so that their signature is different.
Update: Check Dieter Cailliau's answer, @Path("/{a:path1|path2}")
is probably what you want...
public class BlahResource{
@GET
@Path("path1")
public Response m1(){
return Response.ok("blah").build();
}
@GET
@Path("path2")
public Response m2(){
return this.m1();
}
you can check JSR-311's API and it's reference implementation named "jersey" there:
Upvotes: 23
Reputation: 981
@Path("/{a:path1|path2}")
From resteasy docs: http://docs.jboss.org/resteasy/docs/1.0.2.GA/userguide/html_single/index.html#_Path_and_regular_expression_mappings
Upvotes: 98