当前位置: 首页 > article >正文

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 null;
    }

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

over~~


http://www.kler.cn/a/394533.html

相关文章:

  • C++ 编程基础(6)作用域 | 6.3、类作用域
  • 408模拟卷较难题(无分类)
  • apache2配置多站点
  • 向日葵软件Windows系统连接苹果系统(MacOS)的无反应问题解决办法
  • C++《继承》
  • 山泽光纤HDMI线:铜线的隐藏力量
  • [代码随想录Day11打卡] 150. 逆波兰表达式求值 239. 滑动窗口最大值 (有点难度) 347.前 K 个高频元素 (有点难度) 总结
  • 28、dawn
  • .NET 中的虚拟内存
  • 浅谈C#之多线程流式适配器
  • kafka如何知道哪个消费者消费哪个分区?
  • 单片机设计智能翻译手势识别系统
  • 「QT」窗口类 之 QWidget 窗口基类
  • 进入未来城:第五周游戏指南
  • 机器学习day4-朴素贝叶斯分类和决策树
  • ssm121开放式教学评价管理系统+vue(论文+源码)_kaic
  • java -jar`命令详解:运行JAR文件、传递参数与性能调优
  • 版本更新|大量云机风控指纹升级、新增安卓10系统!DuoPLus云手机新版本上线
  • 【人工智能】深入理解LSTM:使用Python构建文本生成模型
  • k8s上部署redis高可用集群
  • Qt主线程把数据发给子线程,主线程会阻塞吗
  • 技术速递|.NET MAUI 欢迎 Syncfusion 开源贡献
  • expo5.2运行web报错Cannot find module ‘react‘
  • 鸿蒙北向开发 : hdmfs-分布式文件系统
  • Acrel安科瑞ADL400防逆流电表在光伏并网中的应用-安科瑞 蒋静
  • 51单片机基础03 矩阵按键读取与外部中断读取