当前位置: 首页 > 知识库问答 >
问题:

如何在Java Jersey+DropWizard中从给定路径反向查找资源?

魏松
2023-03-14

如果给我一个相对路径(例如path=“/foo/1/bar”),我如何找出将使用哪个资源的方法来处理请求(在当前示例中是fooresource.bar方法)?

我尝试使用反射,通过查看所有@path注释类和方法,并构建一个映射来指向这些方法。但是,这并不理想,因为我必须针对所有现有的@path测试给定的相对路径。

下面是一个示例资源:

@Path("/foo")  
public class FooResource {
    @GET
    @Path("{id}/bar")
    public String bar(@PathParam("id") int barId)
    {
        return "Hello Bar " + Integer(barId).toString();
    }


    @POST
    @Path("/biz")
    public String biz(BisRequest biz)
    {
        return "Hello Biz";
    }
}

而不是我目前的解决方案,即:

mapper = new HashMap<String, Method>();
/** content of mapper
String "/foo/{id}/bar" -> java.lang.reflect.Method FooResource.bar
String "/foo/biz"      -> java.lang.reflect.Method FooResource.biz
*/

public Method findResourceMethodForPath(String path, HashMap<String, Method> mapper) {
     String correctKey = findCorrectKeyForPath(path, mapper.keySet());
     return mapper.get(correctKey);
}

是否有一种更干净的方法来实现FindResourceMethodForPath,而不必使用上面代码段中定义映射器

共有1个答案

微生承业
2023-03-14

通过使用DropWizard提供的筛选器找到了答案。

public void filter(ContainerRequestContext requestContext) {
    UriRoutingContext routingContext = (UriRoutingContext) requestContext.getUriInfo();
    ResourceMethodInvoker invoker = (ResourceMethodInvoker) routingContext.getInflector();
    Class<?> className = invoker.getResourceClass();
    Method methodName = invoker.getResourceMethod(); 
}

从这篇文章中找到的答案:如何在ContainerRequestFilter中检索请求的匹配资源

 类似资料:
  • 问题内容: 如何在netbeans项目的类路径中添加文件夹(例如,包含arts的资源文件夹)?我设法通过编辑项目的NB生成的jar文件(即其MANIFEST.MF文件+手动复制资源)来手动完成此操作,但是应该有一种方法可以告诉netbeans并注意资源,不是吗? 文件夹结构如下所示: 我不想将艺术品包装到罐子里,因为我希望艺术品可以轻松更换。如果我将art文件夹添加到src文件夹,则NB可以正常编

  • 我有一个多模块maven应用程序,它具有以下结构: 来自子模块的Java类应该访问它们资源目录中的php文件,并使用Quercus Resin执行它。然而,当项目打包在war中时,子模块被打包到存储在web-app/web-inf/lib中的jar文件中,这使得无法执行php文件。为了解决这个问题,我找到了将所有php文件从子模块复制到web-app中的解决方案,这样当它在Tomcat中提取时,它

  • 我有一个有向图,有大约1000个顶点和3000条边,其中包含圈。 我试图从给定顶点找到所有下游(外)路径。 使用以下Gremlin查询时 对于某些路径,由于周期的原因,需要花费很长时间才能得到结果,尽管simplePath步骤应该可以防止这种情况发生。 我尝试优化查询,并使用“聚合”步骤和“不使用”步骤两次遍历同一顶点,但现在跳过了一些顶点。 谢谢

  • 我有一个一般性的问题,关于如何在边没有权的无向图中找到最短路径和最长路径。 我们需要使用DFS算法来寻找图中的最长路径,而我们需要使用BFS算法来寻找图中的最短路径,这是一个正确的结论吗?

  • 问题内容: 使用readlink函数作为“如何在C中找到可执行文件的位置”的解决方案?,我如何将路径转换为char数组?另外,变量buf和bufsize代表什么,以及如何初始化它们? 编辑:我试图获取当前正在运行的程序的路径,就像上面链接的问题一样。这个问题的答案说来有用。我不知道如何在我的程序中实现它。我试过了: 这显然是不正确的。 问题答案: 这使用的readlink()函数正确的正确使用功能

  • 我正在使用Win8上的Eclipse ADT+ADK包adt-bundle-windows-x86-20131030。我还安装了Java JDK1.6,我看到它是安装在C:\Program Files(x86)\Java\JDK1.6.0Android ADT对我来说很好(它编译了我尝试过的几个项目--hello world,我也能在设备上运行这个应用程序) 我知道Eclipse-ADT使用JAV