当前位置: 首页 > 后端技术 > Java

SpringBoot如何获取Controller的方法名和注解信息?

时间:2023-04-02 10:44:05 Java

方法一通过请求获取用户的URI,然后一个一个循环判断是否可以操作。只是这种方法很不舒服。第二种方法是通过用户要访问的方法来判断是否有权限:preHandle方法中的handler其实就是HandlerMethod(网上说的有时候不是HandlerMethod),加个instanceof验证得到方法名:h.getMethod().getName()可以获取RequestMapping注解中的值:h.getMethodAnnotation(RequestMapping.class)这个方法还是不方便。推荐一个SpringBoot基础教程和实例:https://www.javastack.cn/cate...method三个自定义注解,自定义注解代码:@Retention(RUNTIME)@Target(METHOD)public@interfaceMyOperation{Stringvalue()default"";//默认为空,因为name是value,实际操作中可以不写"value="}Controller代码:@Controller("testController")publicclassTestController{@MyOperation("usermodification")//主要看这里@RequestMapping("test")@ResponseBodypublicStringtest(Stringid){return"Hello,2018!"+id;}}拦截器代码:@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{System.out.println("EnterInterceptor");if(handlerinstanceofHandlerMethod){HandlerMethodh=(HandlerMethod)handler;System.out.println("用户要执行的操作是:"+h.getMethodAnnotation(MyOperation.class).value());//判断后执行操作...}returnHandlerInterceptor.super.preHandle(request,response,handler);}给每个方法加注解太麻烦了,可以在类中加注解@Retention(RUNTIME)@Target(TYPE)public@interfaceMyOperation{Stringvalue()default"";}//在拦截器中,获取h.getMethod().getDeclaringClass().getAnnotation(MyOperation.class);我可以在不创建自定义注释的情况下获取requestMapping。值得注意的是,不是使用GetMapping,而是使用requestMapping