随笔 - 1357  文章 - 0  评论 - 1104  阅读 - 1941万

SpringMVC项目中获取所有URL到Controller Method的映射

复制代码
    /**
     * 获取所有的url
     * 
     * @author Lynch
     */
    @ResponseBody
    @RequestMapping("index")
    public void index() {
        List<RestModel> list = new ArrayList<RestModel>();
        Map<String, RestModel> map = new HashMap<String, RestModel>();
        List<String> urlList = new ArrayList<String>();
        WebApplicationContext wac = (WebApplicationContext) ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE);
        Map<String, HandlerMapping> requestMappings = BeanFactoryUtils.beansOfTypeIncludingAncestors(wac, HandlerMapping.class, true, false);
        for (HandlerMapping handlerMapping : requestMappings.values()) {
            if (handlerMapping instanceof RequestMappingHandlerMapping) {
                RequestMappingHandlerMapping rmhm = (RequestMappingHandlerMapping) handlerMapping;
                Map<RequestMappingInfo, HandlerMethod> handlerMethods = rmhm.getHandlerMethods();
                for (RequestMappingInfo rmi : handlerMethods.keySet()) {
                    PatternsRequestCondition prc = rmi.getPatternsCondition();
                    RequestMethodsRequestCondition mt  = rmi.getMethodsCondition(); 
                    String md = "";
                    for(RequestMethod method : mt.getMethods()) {
                        md = method.name();
                        break;
                    }
                    Set<String> patterns = prc.getPatterns();
                    HandlerMethod handlerMethod = handlerMethods.get(rmi);
                    for (String url : patterns) {  
                        Class<?> clazz = handlerMethod.getBeanType();
                        Method method = handlerMethod.getMethod();
                        RestModel restModel = new RestModel();
                        restModel.setUrl(url);
                        restModel.setClazz(clazz.toString());
                        restModel.setMethod(md);
                        map.put(url, restModel);
                        urlList.add(url);
                    }
                }
            }
        }
        String[] urls = new String[urlList.size()];
        urls = urlList.toArray(urls);
        Arrays.sort(urls);
        for (String url : urls) {
            list.add(map.get(url));
        }
 
    }
复制代码

 

posted on   Ruthless  阅读(2701)  评论(1编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
历史上的今天:
2013-06-20 twitter storm常用命令
2011-06-20 Ext.Window和Ext.tree.TreePanel简单用法
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示