一、功能需求
MS平台目前只提供通过项目和协议来获取模块。每次服务重启服务时,端口随机产生,不能通过MS平台配置定时任务触发更新swagger接口,需要开发一个新接口满足第三方平台调用MS获取所有项目模块
@GetMapping("/list/{projectId}/{protocol}")
public List<ApiModuleDTO> getNodeByProjectId(@PathVariable String projectId, @PathVariable String protocol) {
String userId = SessionUtils.getUserId();
ApiDefinitionDefaultApiTypeUtil.addUserSelectApiType(userId, protocol);
return apiModuleService.getNodeTreeByProjectId(projectId, protocol, null);
}
二、代码处理
List<ApiModuleDTO> getNodeTreeByProtocol(@Param("protocol") String protocol);
public List<ApiModuleDTO> getApiModulesByProtocol(String protocol) {
return extApiModuleMapper.getNodeTreeByProtocol(protocol);
}
/**
* 获取所有项目下的模块树
* @param protocol 协议类型
* @return 所有项目的模块列表
*/
public List<ApiModuleDTO> getAllNodeTreeByProtocol(String protocol) {
List<ApiModuleDTO> apiModules = getApiModulesByProtocol(protocol);
// 按项目ID分组,每个项目单独构建树形结构
Map<String, List<ApiModuleDTO>> projectModuleMap = apiModules.stream()
.collect(Collectors.groupingBy(ApiModuleDTO::getProjectId));
List<ApiModuleDTO> result = new ArrayList<>();
projectModuleMap.forEach((projectId, modules) -> {
result.addAll(getNodeTrees(modules));
});
return result;
}
@GetMapping("/list/all/{protocol}")
public List<ApiModuleDTO> getAllNodeByProtocol(@PathVariable String protocol) {
String userId = SessionUtils.getUserId();
ApiDefinitionDefaultApiTypeUtil.addUserSelectApiType(userId, protocol);
return apiModuleService.getAllNodeTreeByProtocol(protocol);
}
三、PostMan请求示例(每个项目默认会有一个未规划接口)
