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

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

posted @ 2024-02-26 09:20  怒吼的萝卜  阅读(80)  评论(0编辑  收藏  举报