springboot获取当前项目所有URL和URL描述
package com.tusdao.tbs.base.conf;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import java.lang.reflect.Method;
import java.util.Map;
@Slf4j
@Component
public class GetUrlLoader implements ApplicationContextAware {
// @Value("${app.id}")
// public String system_code;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
Map<String, Object> beans = applicationContext.getBeansWithAnnotation(RestController.class);
for (String beanName : beans.keySet()) {
Object value = applicationContext.getBean(beanName);
if (value == null) {
continue;
}
RequestMapping requestMapping = AnnotationUtils.findAnnotation(value.getClass(), RequestMapping.class);
if (requestMapping == null) {
continue;
}
String path = requestMapping.value()[0];
log.info("path: " + path);
Method[] methods = value.getClass().getMethods();
for (Method method : methods) {
//每个方法必定含有下面的注解中的其中一个
ApiOperation apiOperation = AnnotationUtils.findAnnotation(method, ApiOperation.class);
String url = "";
String desc = "";
if (apiOperation != null) {
desc = apiOperation.value();
}
RequestMapping mapping = AnnotationUtils.findAnnotation(method, RequestMapping.class);
PostMapping postMapping = AnnotationUtils.findAnnotation(method, PostMapping.class);
GetMapping getMapping = AnnotationUtils.findAnnotation(method, GetMapping.class);
PutMapping putMapping = AnnotationUtils.findAnnotation(method, PutMapping.class);
DeleteMapping deleteMapping = AnnotationUtils.findAnnotation(method, DeleteMapping.class);
if (postMapping != null) {
url = path + postMapping.value()[0];
} else if (getMapping != null) {
url = path + getMapping.value()[0];
} else if (putMapping != null) {
url = path + putMapping.value()[0];
} else if (deleteMapping != null) {
url = path + deleteMapping.value()[0];
} else if (mapping != null) { //mapping 顺序一定要在后面
url = path + mapping.value()[0];
} else {
continue;
}
//log.info("url : {} , desc : {}, system_code:{}", url, desc, system_code);
log.info("url : {} , desc : {}", url, desc);
//url信息入库
}
}
}
}
执行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!