zoukankan      html  css  js  c++  java
  • 从上下文中获取所有的原生controller

     1     /**
     2      * 获取项目所有被注解修饰的url
     3      * @param run
     4      */
     5     public void getAllUrl(ConfigurableApplicationContext run) {
     6         //获取restcontroller注解的类名
     7         String[] beanNamesForAnnotation = run.getBeanNamesForAnnotation(RestController.class);
     8         //获取类对象
     9         for (String str : beanNamesForAnnotation) {
    10             Object bean = run.getBean(str);
    11 
    12             //处理被AOP关照了的Controller
    13             while (AopUtils.isAopProxy(bean)) {
    14                 try {
    15                     bean = ((Advised) bean).getTargetSource().getTarget();
    16                 } catch (Exception e) {
    17                     throw new RuntimeException("get target bean failed", e);
    18                 }
    19             }
    20 
    21             Class<?> forName = bean.getClass();
    22             RequestMapping declaredAnnotation = forName.getAnnotation(RequestMapping.class);
    23             if (declaredAnnotation != null) {
    24                 //获取类URL
    25                 String urlStarts = declaredAnnotation.value()[0];
    26                 //处理方法URL
    27                 if(urlStarts == null) {
    28                     urlStarts = "/"+str+"/";
    29                 }
    30                 if(!urlStarts.startsWith("/")) {//处理前缀
    31                     urlStarts = "/"+urlStarts;
    32                 }
    33                 if(!urlStarts.endsWith("/")) {//处理后缀
    34                     urlStarts = urlStarts+"/";
    35                 }
    36                 for (Method method : forName.getDeclaredMethods()) {
    37                     //过滤没有添加 @IgnoreLogin的请求
    38                     IgnoreLogin ignoreLogin = method.getAnnotation(IgnoreLogin.class);
    39                     if(ignoreLogin == null) {continue; }
    40                     //获取方法URL
    41                     String urlEnd = "".intern();
    42                     for(;;) {// 暂时就这些,需要再加
    43                         RequestMapping requestMapping = method.getAnnotation(RequestMapping.class);
    44                         if (requestMapping != null) {
    45                             urlEnd = requestMapping.value()[0];
    46                             break;
    47                         }
    48                         GetMapping getMapping = method.getAnnotation(GetMapping.class);
    49                         if (getMapping != null) {
    50                             urlEnd = getMapping.value()[0];
    51                             break;
    52                         }
    53                         PostMapping postMapping = method.getAnnotation(PostMapping.class);
    54                         if (postMapping != null) {
    55                             urlEnd = postMapping.value()[0];
    56                             break;
    57                         }
    58                         PutMapping putMapping = method.getAnnotation(PutMapping.class);
    59                         if (putMapping != null) {
    60                             urlEnd = putMapping.value()[0];
    61                             break;
    62                         }
    63                         DeleteMapping deleteMapping = method.getAnnotation(DeleteMapping.class);
    64                         if (deleteMapping != null) {
    65                             urlEnd = deleteMapping.value()[0];
    66                             break;
    67                         }
    68                     }
    69                     //处理方法URL
    70                     if(urlEnd == null) {
    71                         urlEnd = method.getName();
    72                     }
    73                     if(urlEnd.startsWith("/")) {//处理前缀
    74                         urlEnd = urlEnd.substring(1);
    75                     }
    76                     //处理 urlEnd 的 {}   不考虑 {123}id 的情况
    77                     if(urlEnd.indexOf("{")>=0) {
    78                         String[] split = urlEnd.split("/");
    79                         for (String s : split) {
    80                             if(s.startsWith("{")) {
    81                                 s = "*";
    82                             }
    83                         }
    84                         urlEnd = String.join("/",split);
    85                     }
    86                     //存入请求忽略列表
    87                     if(StringUtils.isEmpty(properties.getAnonUris())) {
    88                         properties.setAnonUris(urlStarts+urlEnd);
    89                     } else {
    90                         properties.setAnonUris(properties.getAnonUris()+StringConstant.COMMA+urlStarts+urlEnd);
    91                     }
    92                 }
    93             }
    94         }
    95     }
    代码如下
  • 相关阅读:
    CodeForces 219D Choosing Capital for Treeland (树形DP)
    POJ 3162 Walking Race (树的直径,单调队列)
    POJ 2152 Fire (树形DP,经典)
    POJ 1741 Tree (树的分治,树的重心)
    POJ 1655 Balancing Act (树的重心,常规)
    HDU 2196 Computer (树形DP)
    HDU 1520 Anniversary party (树形DP,入门)
    寒门子弟
    JQuery选择器(转)
    (四)Web应用开发---系统架构图
  • 原文地址:https://www.cnblogs.com/tangzeqi/p/15094872.html
Copyright © 2011-2022 走看看