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~~

相关推荐
忆~遂愿1 分钟前
vLLM Ascend 项目架构解析与部署配置指南
人工智能·后端·python·ai
Lio n J1 分钟前
基于SpringBoot常用脱敏方案
spring boot·spring·mvc·状态模式
杀死那个蝈坦2 分钟前
微服务网关(Spring Cloud Gateway)实战攻略
java·微服务·架构
闲人编程14 分钟前
Flask扩展开发:从零编写自己的Flask扩展
后端·python·flask·sqlalchemy·config·login·codecapsule
凌云若寒18 分钟前
半导体标签打印的核心痛点分析
java
灰乌鸦乌卡18 分钟前
泛微OA集成档案信息包生成
java
2301_8035545219 分钟前
利用信号完成这个联动需求
java·开发语言
5008420 分钟前
鸿蒙 Flutter 超级终端适配:多设备流转与状态无缝迁移
java·人工智能·flutter·华为·性能优化·wpf
codealy20 分钟前
Spring 事务失效的八大场景深度解析
java·spring boot·后端·spring
好学且牛逼的马21 分钟前
【手写Mybatis | version0.0.1 附带源码 项目文档】
java·开发语言·mybatis