zoukankan      html  css  js  c++  java
  • java中获取swagger所有的接口,url,请求方式等信息

    方法

    @Autowired
        WebApplicationContext applicationContext;
    
        @RequestMapping(value = "/getAllURL", method = RequestMethod.POST)
        public Object getAllURL() {
            List<Map<String, String>> resultList = new ArrayList<>();
    
            RequestMappingHandlerMapping requestMappingHandlerMapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
            // 获取url与类和方法的对应信息
            Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping.getHandlerMethods();
    
            for (Map.Entry<RequestMappingInfo, HandlerMethod> mappingInfoHandlerMethodEntry : map.entrySet()) {
                Map<String, String> resultMap = new LinkedHashMap<>();
    
                RequestMappingInfo requestMappingInfo = mappingInfoHandlerMethodEntry.getKey();
                HandlerMethod handlerMethod = mappingInfoHandlerMethodEntry.getValue();
    
                resultMap.put("className",handlerMethod.getMethod().getDeclaringClass().getName()); // 类名
                Annotation[] parentAnnotations = handlerMethod.getBeanType().getAnnotations();
                for (Annotation annotation : parentAnnotations) {
                    if (annotation instanceof Api) {
                        Api api = (Api) annotation;
                        resultMap.put("classDesc",api.value());
                    } else if (annotation instanceof RequestMapping) {
                        RequestMapping requestMapping = (RequestMapping) annotation;
                        if (null != requestMapping.value() && requestMapping.value().length > 0) {
                            resultMap.put("classURL",requestMapping.value()[0]);//类URL
                        }
                    }
                }
                resultMap.put("methodName", handlerMethod.getMethod().getName()); // 方法名
                Annotation[] annotations = handlerMethod.getMethod().getDeclaredAnnotations();
                if (annotations != null) {
                    // 处理具体的方法信息
                    for (Annotation annotation : annotations) {
                        if (annotation instanceof ApiOperation) {
                            ApiOperation methodDesc = (ApiOperation) annotation;
                            String desc = methodDesc.value();
                            resultMap.put("methodDesc",desc);//接口描述
                        }
                    }
                }
                PatternsRequestCondition p = requestMappingInfo.getPatternsCondition();
                for (String url : p.getPatterns()) {
                    resultMap.put("methodURL",url);//请求URL
                }
                RequestMethodsRequestCondition methodsCondition = requestMappingInfo.getMethodsCondition();
                for (RequestMethod requestMethod : methodsCondition.getMethods()) {
                    resultMap.put("requestType",requestMethod.toString());//请求方式:POST/PUT/GET/DELETE
                }
                resultList.add(resultMap);
            }
            return JSONArray.fromObject(resultList);
        }

    返回结果

     转载自:https://www.cnblogs.com/java-spring/p/10838514.html

  • 相关阅读:
    c#中跨线程调用windows窗体控件
    像职业选手样编码:地道Python
    数据挖掘笔记 第一章:引言
    SVN使用教程(基于SAE)
    常用的js函数
    linux服务之tuned
    PHP 开启短标签
    如叶梦想!
    分布式控制系统Git学习
    LabVIEW(十六):多列列表框控件
  • 原文地址:https://www.cnblogs.com/Crush123/p/14522123.html
Copyright © 2011-2022 走看看