SpringBoot——启动服务时获取所有controller层的接口url列表
@Slf4j
@Component
@Order(1)
@RequiredArgsConstructor
public class CommandLineInitResource implements CommandLineRunner {
/**
* 上下文
*/
@Autowired
WebApplicationContext applicationContext;
@Value("${}")
private String routePrefix;
@Override
public void run(String... args) throws Exception {
//获取controller相关bean
RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
//获取method
Map<RequestMappingInfo, HandlerMethod> methodMap = mapping.getHandlerMethods();
//构造url list
List<String> urlList = new ArrayList<>();
//获取methodMap的key集合
for (RequestMappingInfo info : methodMap.keySet()) {
//controller url集合
Set<String> urlSet = info.getPatternsCondition().getPatterns();
//controller url拼接路由前缀
urlList.addAll(urlSet.stream().map(url ->
//校验前缀
routePrefix.startsWith("/") ? (routePrefix + url) : ("/" + routePrefix + url)
).collect(Collectors.toList()));
//获取所有方法类型
//Set<RequestMethod> methodSet = ().getMethods();
}
log.info("web controller urlList: {}", urlList);
}
}