spring-webmvc根据请求路径找到对应的 HandlerMethod

代码中有的时候想通过请求地址获得对应的controller处理方法(此时HttpServletRequest对象还没有生成),可以使用以下方法(以spring-webmvc6.1.2版本为示例)

    @Resource
    private RequestMappingHandlerMapping handlerMapping;

    /**
     * 根据请求地址找到对应的 HandlerMethod
     *
     * @param requestURI 请求地址
     * @return HandlerMethod
     */
    private HandlerMethod getHandlerMethodByRequestURI(String requestURI) throws Exception {
        Map<RequestMappingInfo, HandlerMethod> handlerMethods = handlerMapping.getHandlerMethods();

        Object mappingRegistry = ObjectUtil.getValue(handlerMapping, "mappingRegistry");
        if (Objects.equals(mappingRegistry.getClass().getName(), "org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry")) {
            Field pathLookup = mappingRegistry.getClass().getDeclaredField("pathLookup");
            pathLookup.setAccessible(true);
            Object o = pathLookup.get(mappingRegistry);
            System.out.println(o);
            if (o instanceof Map map) {
                Object o1 = map.get(requestURI);
                if (o1 instanceof List list && CollectionUtil.isNotEmpty(list)) {
                    HandlerMethod handlerMethod = handlerMethods.get(list.get(0));
                    
                    System.out.println(handlerMethod);
                    return handlerMethod; 
                }
            }
        }
        return null;
    }

拿到HandlerMethod 进而可以获得对应的反射Method,进而获取到方法上的注解,可以做很多事情了

over~~

相关推荐
江河湖海13 分钟前
3. 用Ruby on Rails创建一个在线商城
后端·ruby on rails
新智元16 分钟前
Grok 3证明黎曼猜想,训练遭灾难性事件?数学家称不夸张,两年内AI将解出千禧年难题
人工智能·后端
paterWang29 分钟前
小程序-基于java+SpringBoot+Vue的智能小程序商城设计与实现
java·spring boot·小程序
夜白宋33 分钟前
【EasyExcel等比例缩小导出图片】
java·excel
hummhumm37 分钟前
第 17 章 - Go语言 上下文( Context )
java·服务器·网络·后端·python·sql·golang
刽子手发艺38 分钟前
Javamail发送Excel附件具体实现
java·后端·excel
鸿·蒙1 小时前
【MyBatis 源码阅读与笔记】Mapper 接口的动态代理实现
java·mybatis
paopaokaka_luck1 小时前
【366】基于springboot的高校物品捐赠管理系统
java·spring boot·后端
叫我:松哥1 小时前
基于python Django的boss直聘数据采集与分析预测系统,爬虫可以在线采集,实时动态显示爬取数据,预测基于技能匹配的预测模型
后端·爬虫·python·数据分析·django·bootstrap·薪资预测
京东云开发者1 小时前
写一个Chrome浏览器插件
后端