编程 Jersey 资源中的路径参数
Path parameter in programmatic Jersey resource
我正在使用 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 ...)
现在 - 我如何以编程方式执行此操作?
关于编程的 Jersey 文档 API 至少可以说非常简洁。
您知道在提出问题后如何开始看到解决方案吗?
事实证明,我必须以与 @Path
注释相同的方式添加带有 path 的子资源。之后,我可以通过上下文的 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
}
});
我正在使用 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 ...)
现在 - 我如何以编程方式执行此操作?
关于编程的 Jersey 文档 API 至少可以说非常简洁。
您知道在提出问题后如何开始看到解决方案吗?
事实证明,我必须以与 @Path
注释相同的方式添加带有 path 的子资源。之后,我可以通过上下文的 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
}
});