2017-12-01 4 views
1

実行時に構成ファイルから構成済みのリソースを動的に作成するには、JerseyのプログラムAPI hereを使用しています。 これらのリソースを作成するために、私のコードは、これらの行は次の:これは正常に動作しますプログラムジャージーリソースのパスパラメーター

public ResourceCreator() { 
    for (String resource : cfg.getConfiguredResources()) 
    { 
     logger.log(Level.CONFIG, "Creating resource {0}", resource); 

     final Resource.Builder resourceBuilder = Resource.builder() 
      .path(resource); 

     resourceBuilder.addMethod("GET") 
       .produces(MediaType.APPLICATION_JSON_TYPE) 
       .handledBy(new Inflector<ContainerRequestContext, Response>() { 

      @Override 
      public Response apply(ContainerRequestContext rctx) { 
       // Create response here 
      } 
     }); 
     final Resource resourceObj = resourceBuilder.build(); 
     registerResources(resourceObj); 
    } 

} 

を、しかし、次のステップは、プログラムにある Pathパラメーターとサブリソース(?子リソース)を提供します。通常、私は今

@GET 
@Path("/{id}") 
@Produces({ "application/json" }) 
public Response processIdGet(@PathParam("id") String id ...) 

でこれらの注釈を付けます - をどのように私はこれをプログラムで行うのですか?

プログラマティックAPIに関するJerseyのドキュメントは、ほとんど言及しないと非常に簡潔です。

答えて

1

あなたは質問をした後で解決策を見て始めてどのように知っていますか?

パスの子リソースをアノテーションと同じ方法で追加する必要があります。その後、私は文脈のgetUriInfo()メソッドを通してパスパラメータで得ることができます。このよう

final Resource.Builder subResourceBuilder = resourceBuilder.addChildResource("{id}"); 

subResourceBuilder.addMethod("GET") 
    .produces(MediaType.APPLICATION_JSON_TYPE) 
    .handledBy(new Inflector<ContainerRequestContext, Response>() { 

    @Override 
    public Response apply(ContainerRequestContext rctx) { 
     // Get to the path parameter      
     MultivaluedMap<String, String> pparams = rctx.getUriInfo().getPathParameters(); 
     List<String> idValues = pparams.get("id"); 
     // Create response here 
    } 
}); 
関連する問題