代码之家  ›  专栏  ›  技术社区  ›  Sébastien RoccaSerra

在Spring2.0控制器方法中,如何知道在当前servlet上下文中映射了哪些URL?

  •  2
  • Sébastien RoccaSerra  · 技术社区  · 17 年前

    在Spring2.0中,有没有一种快速的方法可以从控制器方法中获得当前servlet上下文映射URL的列表?

    我正在编写一个名为 getMappedUrls() ,此方法的目的是显示在当前servlet上下文中映射的URL。

    此方法用于生成可用服务的小型在线文档。

    谢谢

    Kent Lai的答案对我很有用:

    final Map<Object, AbstractUrlHandlerMapping> beans =
        getApplicationContext().getBeansOfType(AbstractUrlHandlerMapping.class);
    for (final AbstractUrlHandlerMapping bean : beans.values())
    {
        final Map<String, Object> mapping = bean.getHandlerMap();
        for(final String url : mapping.keySet())
            urls.add(url);
    }
    
    2 回复  |  直到 17 年前
        1
  •  5
  •   cristid9 Rakesh Kumar    6 年前

    这听起来是个有趣的想法,所以我去挖掘 源代码,以找出是否有一种方法。

    log4j ),我注意到映射是在我的 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

    进一步挖掘,我注意到所有处理程序映射都添加到处理程序映射中,您可以从 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping#getHandlerMap

    DispatcherServlet 正在使用 HandlerMapping 哪一个 AbstractUrlHandlerMapping (及 AbstractHandlerMapping 调度员服务 保存另一个handlerMappings列表

    org.springframework.web.servlet.DispatcherServlet#handlerMappings

    这里的坏消息是,它是一个受保护的类实例变量。

    因此,我最好的建议(如果这可以被认为是最好的),你可以做的,以找出所有映射的url是

    1. 获得一个实例 ApplicationContext .
    2. 找出至少类型的所有bean AbstractUrlHandlerMapping (因为任何后续操作都不会告诉您任何映射的url)。
    3. getHandlerMap 并获取所有键集,即映射的url。

    请注意,这是我从使用 @RequestMapping

        2
  •  1
  •   sblundy    17 年前