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 m2()
{
...
}
}
Я использую RESTEasy.
Ответы
Ответ 1
да, вы можете это сделать, хотя вам придется переименовать свои методы, чтобы их подпись отличалась.
Обновление: Проверьте ответ Дитера Кайляу, @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();
}
вы можете проверить API JSR-311 и выполнить его ссылочную реализацию с именем "Джерси":
API JSR311
Jersey
Ответ 2
@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
Ответ 3
Дополнительные сведения об аннотации Path...
Как и предыдущие ответы, регулярные выражения, которые должны использоваться в объявлении объявления аннотированных путей:
{" variable-name [ ":" regular-expression ] "}
Вы можете объявлять несколько путей, но есть также иерархия путей, которая не была сразу очевидна для меня, в результате чего аннотированный путь класса префикс содержит следующие аннотации пути метода. Можно написать следующий класс для краткой опции с несколькими путями, которая может быть полезна для управления версиями ресурсов.
@Path("/{a:v1|v2}")
@Produces("text/*")
public class BlahResource {
@GET
@Path("/blah")
public Response m1() {
return Response.ok("blah").build();
}
}
Обратите внимание на то, что класс "BlahResource" был объявлен с помощью пути "/v1" или "/v2", что делает ресурс доступным как:
$ curl localhost:8080/v1/blah
blah
а также
$ curl localhost:8080/v2/blah
blah