如何获取SpringMVC应用中的所有映射信息

Posted 恒奇恒毅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取SpringMVC应用中的所有映射信息相关的知识,希望对你有一定的参考价值。

我们知道,一般的SpringMVC应用都是采用RequestMappingHandlerMapping通过RequestMapping完成URL与方法映射。RequestMappingHandlerMapping是保存在容器中的。那么如果我们想获取相关信息,可以从容器中获取RequestMappingHandlerMapping从而得到相关信息。
如下代码展示了:
首先定义JavaBean来保存需要获取的信息

static class MappingInfo
        private Class<?> className; //类
        private Method method;//方法
        private List<String> httpMethods;//http方法,同一个接口可以通过GET/POST访问
        private List<String> classRequestMappings;//class定义的映射
        private List<String> requestMappings;//具体的每个映射,不包含context-path,但是包含类上的

然后从容器中获取RequestMappingHandlerMapping,当然容器你可以通过ApplicationContextAware注入或者@Autowired注入

RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
        // 获取url与类和方法的对应信息
        Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();

        List<MappingInfo> list = new ArrayList<>(map.size());

        for (Map.Entry<RequestMappingInfo, HandlerMethod> m : map.entrySet()) 
            MappingInfo mappingInfo = new MappingInfo();
            RequestMappingInfo info = m.getKey();
            HandlerMethod handlerMethod = m.getValue();
            //获取当前方法所在类名
            Class<?> bean = handlerMethod.getBeanType();
            //使用反射获取当前类注解内容
            RequestMapping requestMapping = bean.getAnnotation(RequestMapping.class);
            if(null != requestMapping)
                String[] value = (String[]) AnnotationUtils.getAnnotationAttributes(requestMapping).get("value");
                mappingInfo.setClassRequestMappings(Arrays.asList(value));
            
            //获取方法上注解以及注解值

            PatternsRequestCondition p = info.getPatternsCondition();
            List<String> urls = new ArrayList<>();
            urls.addAll(p.getPatterns());
            mappingInfo.setRequestMappings(urls);

            mappingInfo.setClassName(handlerMethod.getMethod().getDeclaringClass());
            mappingInfo.setMethod(handlerMethod.getMethod());
            RequestMethodsRequestCondition methodsCondition = info.getMethodsCondition();

            List<String> httpMethods = new ArrayList<>();
            methodsCondition.getMethods().forEach(requestMethod -> httpMethods.add(requestMethod.toString()));
            mappingInfo.setHttpMethods(httpMethods);

            list.add(mappingInfo);
        

        System.out.println(JSON.toJSONString(list));

以上是关于如何获取SpringMVC应用中的所有映射信息的主要内容,如果未能解决你的问题,请参考以下文章

如何获取SpringMVC应用中的所有映射信息

获取SpringMVC中所有RequestMapping映射URL信息

SpringMVC之使用requestMapping映射请求映射参数映射头

SpringMVC - @RequestMapping 映射请求

SpringMVC源码-执行流程

获取URI路径中的变量