gpt4 book ai didi

java - ResourceContext.matchResource(URI) 的 Jersey 2 替代品是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:00:03 31 4
gpt4 key购买 nike

在 Jersey 2.0 下,如何找出任意 URI 映射到的资源?在 Jersey 1.x 下,我会使用 ResourceContext.matchResource(URI) .

我正在尝试做什么:我正在尝试处理通过 URI 引用另一个资源的传入请求。例如,这是一个将用户链接到部门的操作。

POST /departments/5
{
"user": "http://example.com/users/10"
}

POST/departments/5 解析为:

class DepartmentResource
{
@POST
void linkUser() { ... }
}

为了满足这个请求,我需要将 URI 解析回 UserResource,然后从那里解析到它的数据库 ID。将 @Context UriInfo 添加到 linkUser() 不会有帮助,因为此 UriInfo 对应于部门而不是用户的 URI。

更新:我在 https://github.com/eclipse-ee4j/jersey/issues/2444 提交了错误报告

UPDATE2:发布后续问题:Jersey2: Navigating from a Resource to an instance

最佳答案

如果您在容器中运行,您可以执行以下操作:

// Classes that may be of interest
import org.glassfish.jersey.server.ExtendedResourceContext;
import org.glassfish.jersey.server.model.Invocable;
import org.glassfish.jersey.server.model.Parameter;
import org.glassfish.jersey.server.model.Resource;
import org.glassfish.jersey.server.model.ResourceMethod;

@Context private ExtendedResourceContext rconfig;

public Resource dumpResources(String relUrl){
List<Resource> parents = rconfig.getResourceModel().getRootResources();
for(Resource res: parents){
if(relUrl.startsWith(res.getPath()){
return res;
}
}
}

如果您有一个包含子资源的更复杂的层次结构,您可以使用以下方法递归下降到它们的子资源,或者您可以创建一个 ResourceModelVisitor 并通过以下方式使用访问者模式:

rconfig.getResourceModel().accept( (ResourceModelVisitor) visitor);

可能还有另一种解决方案,但我可以验证它是否有效。我使用这种模式来动态记录我的资源(而不是 wadl)

关于java - ResourceContext.matchResource(URI) 的 Jersey 2 替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17284419/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com