web-dev-qa-db-ja.com

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を使用しています。

41
terry207

はい、できますが、メソッドの名前を変更して署名が異なるようにする必要があります。

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

ジャージー

16
fasseg
76
Dieter Cailliau

パス注釈に関するいくつかの追加の詳細...

以前の応答状態として、注釈付きパス宣言マッピングで使用される正規表現:

{" 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
10
Opentuned