通过请求路径找到处理请求的具体的类和方法,即通过URL找到对应哪个Controller的哪个方法

本文介绍了一种在Spring MVC项目中迅速定位处理HTTP请求的类和方法的技巧。通过获取`RequestMappingHandlerMapping` Bean,可以获取所有请求映射信息,包括请求路径、处理类和方法。这个方法在协同开发环境中尤其有用,能帮助开发者快速定位代码,提高效率。但注意在使用后要及时删除,避免泄露敏感信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

您是否有这样的困扰:浏览器F12看到请求,去代码里面找具体处理请求的类和方法,找了半天找不到,一般处理请求的类会放在controller包里面,或者是action包里面,这是开发规范,开发人员基本都会遵守。但在协同开发环境中,往往十几个人开发一个项目,而且公司一般都有自己的框架,好多请求可能会被封装到jar包里面,jar包多,很难找,找到了还要看半天,不确定是不是这个,当然,你可以debug看。那么,有没有简单的办法,迅速定位到某个请求的具体类和方法呢?

既然所有的请求都交给spring管理了,那么spring肯定知道你的所有请求,并且准确地知道处理请求具体的类和方法,所以去找spring准没错,spring这么优秀的框架,有没有提供这样的查找方法呢?答案是肯定的。spring把您所有的请求都封装在了org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping这个对象中,获取到了RequestMappingHandlerMapping,就知道了所有的请求信息

关键代码

<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils" %>
<%@ page import="org.springframework.web.context.WebApplicationContext" %>
<%@ page import="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" %>
<%@ page import="org.springframework.web.servlet.mvc.method.RequestMappingInfo" %>
<%@ page import="org.springframework.web.method.HandlerMethod" %>
<%@ page import="java.util.Map" %>
<%@ page import="org.springframework.web.servlet.mvc.condition.PatternsRequestCondition" %>
<%@ page import="java.util.Set" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>【requests】获取请求路径对应的JAVA类和具体的方法</title>
</head>
<body>

    <%
        //获取WebApplicationContext,用于获取Bean
        WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(application);

        //获取spring容器中的RequestMappingHandlerMapping
        RequestMappingHandlerMapping requestMappingHandlerMapping = (RequestMappingHandlerMapping) webApplicationContext.getBean("requestMappingHandlerMapping");

        //获取应用中所有的请求
        Map<RequestMappingInfo, HandlerMethod> handlerMethods = requestMappingHandlerMapping.getHandlerMethods();

        int requestCount = 0;
        int handlerCount = handlerMethods.size();

        //遍历所有的请求信息
        for (Map.Entry<RequestMappingInfo, HandlerMethod> entry : handlerMethods.entrySet()) {
            //key为http请求信息,即URL
            RequestMappingInfo requestMappingInfo = entry.getKey();

            //value为处理请求信息的方法,即code
            HandlerMethod handlerMethod = entry.getValue();

            //URL
            PatternsRequestCondition patternsCondition = requestMappingInfo.getPatternsCondition();
            Set<String> patterns = patternsCondition.getPatterns();

            requestCount += patterns.size();

            //类和方法
            String type = handlerMethod.getBeanType().getName();
            String method = handlerMethod.getMethod().getName();

            out.println("<span>URL:</span>" + patterns);
            out.println("<br/>");
            out.println("<span>类:</span>" + type);
            out.println("<br/>");
            out.println("<span>方法:</span>" + method);
            out.println("<hr/>");

        }

        out.println("<h5>请求总数:" + requestCount + "       处理器总数:" + handlerCount + "</h5>");

    %>

</body>
</html>

在这里插入图片描述
在这里插入图片描述
测试环境或生产环境,在运维中,可以直接把该JSP传到项目的根目录,一访问,一目了然,但用完后一定要将其删除,不然会暴露项目关键信息,有安全隐患

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值