zoukankan      html  css  js  c++  java
  • Java通过反射获取Controller类、方法上注解和注解里的值

    背景

    在进行权限管理方面的开发过程中,尝试通过反射获取匹配的方法的注解,然后得到匹配路径进行鉴权。

    反射获取类的注解@RequestMapping

    //通过反射获取到类,填入类名
    Class cl1 = Class.forName("");
    //获取RequestMapping注解
    RequestMapping anno = (RequestMapping) cl1.getAnnotation(RequestMapping.class);
    //获取类注解的value值  
    String[] value = anno.value();
    //将字符串数组转成字符串
    StringBuilder sb = new StringBuilder();
    for (String ele : value) {
        sb.append(ele);
    }
    String classPath = sb.toString();
    

    反射获取类注解 @GetMapping、@PutMapping、@PostMapping、@DeleteMapping

    //获取类中所有的方法
    Method[] methods = cl1.getDeclaredMethods();
    for (Method method : methods) {
        GetMapping getRequestMothed = (GetMapping) method.getAnnotation(GetMapping.class);
        PutMapping putRequestMothed = (PutMapping) method.getAnnotation(PutMapping.class);
        PostMapping postRequestMothed = (PostMapping) method.getAnnotation(PostMapping.class);
        DeleteMapping deleteRequestMothed = (DeleteMapping)method.getAnnotation(DeleteMapping.class);
       //获取类注解的value值
       String[] value1 = getRequestMothed .value();
       String[] value2 = putRequestMothed .value();
       String[] value3 = postRequestMothed .value();
       String[] value4 = deleteRequestMothed.value();
    } 
    

    反射获取类注解 @ApiOperation

    //获取类中所有的方法
    Method[] methods = cl1.getDeclaredMethods();
    for (Method method : methods) {
       ApiOperation apiOperation = method.getAnnotation(ApiOperation.class);
       //获取方法上@ApiOperation注解的value值
       apiOperationValue = apiOperation.value();
    }
    

    反射获取方法参数类表

    //通过反射获取到类
    String cl1 = Class.forName(string);
    //获取类中所有的方法
    Method[] methods = cl1.getDeclaredMethods();
    for (Method method : methods) {
        //获取方法参数注解
        Annotation[][] parameterAnnotations = method.getParameterAnnotations();
        for (Annotation[] annotations : parameterAnnotations) {
            for (Annotation annotation : annotations) {
                //获取注解名
                String name = annotation.annotationType().getSimpleName();
            }
        }
    }
    
  • 相关阅读:
    HDU 4725 The Shortest Path in Nya Graph(优先队列+dijkstra)
    POJ 3216 Repairing Company(二分图匹配)
    POJ 3414 Pots(bfs打印路径)
    POJ 3278 Catch That Cow(bfs)
    poj 3009 curling2.0 (dfs)
    用“道”的思想解决费用流问题---取/不取皆是取 (有下界->有上界) / ACdreamoj 1171
    hdu2448 / 费用流 / harbin赛区c题
    大数类模板(+-*/%等等)
    hdu4619 / 最大独立集
    hdu4888 多校B 最大流以及最大流唯一判断+输出方案
  • 原文地址:https://www.cnblogs.com/hnxbp/p/14975288.html
Copyright © 2011-2022 走看看