- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 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/
在 Jersey 2.0 下,如何找出任意 URI 映射到的资源?在 Jersey 1.x 下,我会使用 ResourceContext.matchResource(URI) . 我正在尝试做什么:我
我是一名优秀的程序员,十分优秀!