乐趣区

关于java:Spring-Boot-如何获取-Controller-方法名和注解信息

办法一

通过 request 取得用户的 URI,再逐个循环判断是否能够操作。只是这种办法很让人好受。

办法二

通过用户要拜访的办法来判断是否有权限:

preHandle 办法中 handler 理论为 HandlerMethod,(看网上说的有时候不是 HandlerMethod),加个 instanceof 验证吧

能够失去办法名:h.getMethod().getName()

能够失去 RequestMapping 注解中的值:h.getMethodAnnotation(RequestMapping.class)

这种办法还是不太不便

举荐一个 Spring Boot 基础教程及实战示例:
https://www.javastack.cn/cate…

办法三

自定义注解,自定义注解代码:

@Retention(RUNTIME)
@Target(METHOD)
public @interface MyOperation {String value() default "";// 默认为空,因为名字是 value,实际操作中能够不写"value="
}

Controller 代码:

@Controller("testController")
public class TestController {@MyOperation("用户批改")// 次要看这里
    @RequestMapping("test")
    @ResponseBody
    public String test(String id) {return "Hello,2018!"+id;}
}

拦截器的代码:

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {System.out.println("进入拦截器");
    if(handler instanceof HandlerMethod) {HandlerMethod h = (HandlerMethod)handler;
        System.out.println("用户想执行的操作是:"+h.getMethodAnnotation(MyOperation.class).value());
        // 判断后执行操作...
    }
    return HandlerInterceptor.super.preHandle(request, response, handler);
}

在每个办法下面加注解太麻烦啦, 能够在类上加注解

@Retention(RUNTIME)
@Target(TYPE)
public @interface MyOperation {String value() default "";
}

// 拦截器中这样取得
h.getMethod().getDeclaringClass().getAnnotation(MyOperation.class);

我能够获取 requestMapping, 不必创立自定义注解啊, 值得注意的是, 不要应用 GetMapping 等, 要应用 requestMapping。

原文链接:https://blog.csdn.net/howroad…

版权申明:本文为 CSDN 博主「howroad」的原创文章,遵循 CC 4.0 BY-SA 版权协定,转载请附上原文出处链接及本申明。

近期热文举荐:

1.1,000+ 道 Java 面试题及答案整顿 (2021 最新版)

2. 别在再满屏的 if/ else 了,试试策略模式,真香!!

3. 卧槽!Java 中的 xx ≠ null 是什么新语法?

4.Spring Boot 2.5 重磅公布,光明模式太炸了!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

退出移动版