如何获取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中所有RequestMapping映射URL信息
SpringMVC之使用requestMapping映射请求映射参数映射头