Подтвердить что ты не робот

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.

4b9b3361

Ответ 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

Ответ 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