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

相关推荐
天远云服5 分钟前
Go语言高并发实战:集成天远手机号码归属地核验API打造高性能风控中台
大数据·开发语言·后端·golang
东北小狐狸-Hellxz8 分钟前
解决java客户端连接ssh失败问题
java·网络·ssh
悟能不能悟8 分钟前
HttpServletRequest request获取整个headers有什么方法
java
__万波__9 分钟前
二十三种设计模式(二十)--解释器模式
java·设计模式·解释器模式
网安_秋刀鱼21 分钟前
【java安全】反序列化 - CC1链
java·c语言·安全
零度@23 分钟前
Java消息中间件-Kafka全解(2026精简版)
java·kafka·c#·linq
钱多多_qdd24 分钟前
springboot注解(二)
java·spring boot·后端
神奇小汤圆26 分钟前
MyBatis批量插入从5分钟优化到3秒,我做了这3件事
后端
上去我就QWER27 分钟前
什么是反向代理?
后端·nginx
Cosmoshhhyyy29 分钟前
《Effective Java》解读第32条:谨慎并用泛型和可变参数
java·python