RequestMapper

@RequestMapping(value = "/v1/getAllUrl", method = RequestMethod.POST)
  public Object getAllUrl() {
      RequestMappingHandlerMapping mapping = SpringContextHolder.getBean(RequestMappingHandlerMapping.class);
      // 获取url与类和方法的对应信息
      Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();

List<String> urlList = new ArrayList<>();
for (RequestMappingInfo info : map.keySet()) {
   // 获取url的Set集合,一个方法可能对应多个url
   Set<String> patterns = info.getPatternsCondition().getPatterns();

   for (String url : patterns) {
      urlList.add(url);
   }
}

      List<Map<String, String>> list = new ArrayList<>();
      for (Map.Entry<RequestMappingInfo, HandlerMethod> m : map.entrySet()) {
          Map<String, String> map1 = new HashMap<>();
          RequestMappingInfo info = m.getKey();
          HandlerMethod method = m.getValue();
          PatternsRequestCondition p = info.getPatternsCondition();
          for (String url : p.getPatterns()) {
              map1.put("url", url);
          }
          map1.put("className", method.getMethod().getDeclaringClass().getName()); // 类名
          map1.put("method", method.getMethod().getName()); // 方法名
          RequestMethodsRequestCondition methodsCondition = info.getMethodsCondition();
          for (RequestMethod requestMethod : methodsCondition.getMethods()) {
              map1.put("type", requestMethod.toString());
          }
          list.add(map1);
      }


      return list;
  }

  private String  getMapper() {
      String result = "";
      RequestMappingHandlerMapping rmhp = SpringContextHolder.getBean(RequestMappingHandlerMapping.class);
      Map<RequestMappingInfo, HandlerMethod> map = rmhp.getHandlerMethods();
      for (RequestMappingInfo info : map.keySet()){
          result += info.getPatternsCondition().toString();
          HandlerMethod hm = map.get(info);
          result += hm.getBeanType().getName();
          result += getMethodParams(hm.getBeanType().getName(),hm.getMethod().getName());
          result += info.getProducesCondition();
      }
      return result;
  }

  private String getMethodParams(String className,String methodName){
      String result="";
      try{
          ClassPool pool=ClassPool.getDefault();
          ClassClassPath classPath = new ClassClassPath(this.getClass());
          pool.insertClassPath(classPath);
          CtMethod cm =pool.getMethod(className, methodName);
          // 使用javaassist的反射方法获取方法的参数名
          MethodInfo methodInfo = cm.getMethodInfo();
          CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
          LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);
          result=cm.getName() + "(";
          if (attr == null) {
              return result + ")";
          }
          CtClass[] pTypes=cm.getParameterTypes();
          String[] paramNames = new String[pTypes.length];
          int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;
          for (int i = 0; i < paramNames.length; i++) {
              if(!pTypes[i].getSimpleName().startsWith("HttpServletRe")){
                  result += pTypes[i].getSimpleName();
                  paramNames[i] = attr.variableName(i + pos);
                  result += " " + paramNames[i]+",";
              }
          }
          if(result.endsWith(",")){
              result=result.substring(0, result.length()-1);
          }
          result+=")";
      }catch(Exception e){
          e.printStackTrace();
      }
      return result;
  }

 

posted @ 2019-04-26 17:18  牧之丨  阅读(1043)  评论(0编辑  收藏  举报