程序化泽西资源中的路径参数

时间:2017-12-01 17:24:06

标签: java jersey

我使用Jersey编程的here编程API在运行时从配置文件动态创建配置的资源。 我创建这些资源的代码遵循以下几行:

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 个答案:

答案 0 :(得分:1)

在您提出问题后,您是否知道如何开始查看解决方案?

事实证明,我必须以与@Path注释相同的方式添加带有路径的子资源。之后,我可以通过上下文的getUriInfo()方法获取path参数。

像这样:

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
    }
});