gpt4 book ai didi

java - 如何知道在 Spring 2.0 Controller 方法中当前 servlet 上下文中映射了哪些 URL?

转载 作者:行者123 更新时间:2023-11-30 06:39:52 25 4
gpt4 key购买 nike

在 Spring 2.0 中,有没有一种快速的方法可以从 Controller 方法内部获取当前 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);
}

最佳答案

这听起来是个有趣的想法,所以我深入研究了 Spring Web MVC 源代码,看看是否有办法。

首先,我为我的 spring 框架日志记录 (log4j) 打开调试,我注意到映射是在我的 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 中完成的。类(因为我正在使用它)。

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

假设您正在使用派生自它的处理程序。

接下来,我发现 DispatcherServlet正在使用 HandlerMapping ,这AbstractUrlHandlerMapping (和 AbstractHandlerMapping )实现,以解析 url(很明显他们必须使用它)。结果是 DispatcherServlet持有另一个 handlerMappings 列表

org.springframework.web.servlet.DispatcherServlet#handlerMappings

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

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

  1. 获得 ApplicationContext 的实例.
  2. 找出至少类型为AbstractUrlHandlerMapping 的所有bean (因为任何更进一步的东西都不会告诉你任何映射的 url)。
  3. 迭代列表并调用getHandlerMap并获取所有 keySet,即映射的 url。

请注意,这是我从 @RequestMapping 的使用中挖掘出来的注释。我不确定如果您在 spring 配置文件中映射 url 会有什么不同。

关于java - 如何知道在 Spring 2.0 Controller 方法中当前 servlet 上下文中映射了哪些 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/413799/

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