2012-01-23 12 views
3

API開発でRESTEasyを使用しています。私のURLはhttp://localhost:8080/project/player/Mまたはhttp://localhost:8080/project/player0個以上のパスパラメータを持つ@pathを残してください

です。これは、{gender}をパスパラメータとして扱うことを意味します。

私の問題は、私はマッピング

@GET 
@Path("player/{gender}") 
@Produces("application/json") 

の下に使用しますが、それを使用する場合、それはhttp://localhost:8080/project/player/Mのためではなく、http://localhost:8080/project/playerのためにマッピングし、REST方式にこのURLをMAPPする方法です。 0個以上のパスパラメータをマップする正規表現が必要です

ありがとうございました。

答えて

4

パスパラメータ(@PathParam)はオプションではありません。あなたがマップしたいならば。 http://localhost:8080/project/player/M

  • http://localhost:8080/project/player
    • あなたは二つの方法が必要になります。メソッドのオーバーロードを使用できます。

      @GET 
      @Path("player/{gender}") 
      @Produces("application/json") 
      public Whatever myMethod(@PathParam("gender") final String gender) { 
          // your implementation here 
      } 
      
      @GET 
      @Path("player") 
      @Produces("application/json") 
      public Whatever myMethod() { 
          return myMethod(null); 
      } 
      
    +1

    を参照してください、私はこれが正しいとは思いません。参照:http://stackoverflow.com/questions/5421104/optional-pathparam-in-jax-rs – rtcarlson

    8

    を経由して、オプションのパスパラメータのサンプルを持っている以下のリンクは、これはパスパラメータではなく、クエリ文字列でなければなりません何らかの理由はありますか?後者を使用するように変更すると、@DefaultValueアノテーションを使用できます。

    だからあなたのコードは次のようになります。

    @GET 
    @Path("player") //example: "/player?gender=F" 
    @Produces("application/json") 
    public Whatever myMethod(@QueryParam("gender") @DefaultValue("M") final String gender) { 
        // your implementation here 
    } 
    
    0

    あなたがパスにオプションのパラメータを持っていたいときは、正規表現を使用する必要があります。

    だからあなたのコードは次のようになります。

    @GET 
    @Path("/player{gender : (/\\w+)?}") 
    @Produces("application/json;charset=UTF-8") 
    public Whatever myMethod(@QueryParam("gender") @DefaultValue("M") final String gender) { 
        // your implementation here 
    } 
    

    詳細についてはhttps://docs.jboss.org/resteasy/docs/1.1.GA/userguide/html/Using__Path_and__GET___POST__etc..html

    関連する問題