首页 > 其他分享 >SpringBoot:通过实现自定义接口获取实现类的@RequestMapping注解请求路径

SpringBoot:通过实现自定义接口获取实现类的@RequestMapping注解请求路径

时间:2024-02-26 09:22:38浏览次数:34  
标签:RequestMapping String 自定义 value class 注解 public SpringBoot

1. 自定义接口

// 什么都不用写,就定义一个空接口
public interface MyMark {

}

2. Controller接口类实现自定义接口

@RestController
public class DayController implements MyMark {

    @RequestMapping("/day1")
    public String get1(){
        return "day1";
    }

    @RequestMapping("/day2")
    public String get2(){
        return "day2";
    }

}
@RestController
@RequestMapping("/month")
public class MonthController implements MyMark {

    @RequestMapping
    public String get1(){
        return "No1";
    }

    @RequestMapping("/No2")
    public String get2(){
        return "No2";
    }

}
@RestController
@RequestMapping
public class YearController implements MyMark {

    @RequestMapping
    public String get1(){
        return "No1";
    }

    @RequestMapping("/No2")
    public String get2(){
        return "No2";
    }
}

3. 编写配置类自动获取所有接口路径

@Configuration
public class MenuSynchroConfig {

    @Autowired
    WebApplicationContext applicationContext;
    private static Map<String, List<String>> urls = new HashMap<>();

    // 服务启动后执行
    @PostConstruct
    public void initialize() {
        list();
    }

    public void list(){
        // 获取所有实现自定义接口的类
        Map<String, AuthStat> beansOfType = applicationContext.getBeansOfType(AuthStat.class);
        for (String key : beansOfType.keySet()) {
            // 获取类内的所有方法
            Method[] methods = beansOfType.get(key).getClass().getMethods();
            // 获取类的注解
            RequestMapping requestMapping = beansOfType.get(key).getClass().getAnnotation(RequestMapping.class);
            // 判断注解的value值是否为空
            if (requestMapping != null && requestMapping.value().length != 0) {
                // 获取注解的value值数组
                String[] value1 = requestMapping.value();
                // 循环值数组
                for (String s1 : value1) {
                    // 循环方法数组
                    for (Method method : methods) {
                        // 获取方法的注解
                        RequestMapping annotation = method.getAnnotation(RequestMapping.class);
                        // 注解不为空
                        if (annotation != null) {
                            // 获取注解的value值数组
                            String[] value = annotation.value();
                            // 循环值数组
                            for (String s : value) {
                                // 拼接类注解value值与方法注解value值
                                urls.add(s1 + s);
                            }
                        }
                    }
                }
            } else {
                for (Method method : methods) {
                    RequestMapping annotation = method.getAnnotation(RequestMapping.class);
                    if(annotation!=null){
                        String[] value = annotation.value();
                        for (String s : value) {
                            urls.add(s);
                        }
                    }
                }
            }
        }
        urls.forEach(System.out::println);
    }
}
## 运行结果
/day1
/day2
/month/No2
/No2

 

 文章转载至:https://blog.csdn.net/qq_34168515/article/details/106414420

标签:RequestMapping,String,自定义,value,class,注解,public,SpringBoot
From: https://www.cnblogs.com/nhdlb/p/18033631

相关文章

  • SpringBoot结合Liquibase实现数据库变更管理
    https://juejin.cn/post/7171232605478584328 https://juejin.cn/post/7170857098538909732  前言研发过程中经常涉及到数据库变更,对表结构的修复及对数据的修改,为了保证各环境都能正确的进行变更,我们可能需要维护一个数据库升级文档来保存这些记录,有需要升级的环境按......
  • Linux离线部署SpringBoot前后端分离项目
    本文介绍了在内网下的纯离线环境中部署SpringBoot前后端分离项目,由于是个前端仔,并未接触过linux,在经历诸多错误和踩坑之后,终于部署成功(大哭),在此记录一下。工具选择选择合适的工具进行远程连接,如Xshell、Xftp、putty、Terminus等Xshell:连接远程服务器的命令终端Xftp:连接远......
  • JWT(Token令牌)整合 SpringBoot
     前言:JWT(JSONWebToken)可以被称为令牌(token)。JWT是一种在网络应用中广泛使用的令牌格式,用于在用户和服务器之间传递安全可靠的信息。JWT通常包含了用户的身份信息和一些其他的元数据,被用作身份验证和授权。因此,人们经常将JWT简称为令牌(token)。 代码整合:1.导......
  • Kafka 集成SpringBoot
    1.环境准备1.Kafka集群环境准备1.准备一个Kafka集群环境并启动Kafka3.6.1集群安装与部署2.创建firstTopic/usr/kafka/kafka_2.13-3.6.1/bin/kafka-topics.sh--bootstrap-server192.168.58.130:9092--create--partitions1--replication-factor3--topicfirst2.Sp......
  • 自定义一个QAbstractScrollArea(二)
    延续上一篇文章,本文以另一种方法实现QAbstractScrollArea。此例子是一个图片缩略图的列表控件,控件沿水平方向延伸。仅作为一个例子,因为实际的图片列表可以用QListWidget实现,并不需要自己写代码。下面是程序的运行截图:头文件:classMListWidget:publicQAbstractScrollArea{......
  • SpringBoot + Redis 的配置及使用
    一、SpringBoot配置Redis1.1pom引入spring-boot-starter-data-redis包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></......
  • 前端防抖-通过自定义指令实现
    前端防抖-通过自定义指令实现1、通过自定义事件实现前端防抖Vue.directive('preventReClick',{inserted(el,binding){el.addEventListener('click',()=>{if(!el.disabled){el.disabled=truesetTimeout(()=>......
  • Unity编辑器扩展秘籍-利用EditorApplication.contextualPropertyMenu为右键菜单增加自
    假设我们希望为材质右键弹出按钮增加新的功能,应该怎么做呢我们可以通过注册EditorApplication.contextualPropertyMenu全局回调方法,增加自定义的MenuItemusingUnityEditor;usingUnityEngine;namespaceYaojz{[InitializeOnLoad]publicstaticclassMaterialC......
  • docker 自定义网络
    docker的网络分为:单主机、跨主机这篇先说:单主机我们先说一下docker的原生网络模式网络模式简介优点使用场景none空网络,没有网络此网络与外界隔离,安全度非常高适合公司内部生产密钥host容器与宿主机共享namespace直接使用宿主机的网络,网络性能方面最好。......
  • 自定义QComboBox解决QCombobox设置样式并与QDateTime一起使用时候弹出选项乱跳
    头文件:#pragmaonce#include<QToolButton>#include<QListView>#include<QWidgetAction>#include<QPushButton>#include<QHBoxLayout>#include<QMenu>#include<QStandardItemModel>#include<qdebug.h>classCustomCo......