Java 调用 GitLabAPI 获取仓库里的文件件 提交记录

1. 需求

项目组 需要做统计,获取每个开发人员的代码提交次数,提交时间,提交人等等,因代码在GitLab上管理,所以需要调用GitLabAPI来获取。

2. 开发

API官网:https://docs.gitlab.com/ee/api/

2.1 创建自定义令牌

自定义令牌是为了后续接口访问有权限而建立的。
创建 GitLab 个人访问令牌的方法如下:

  1. 在任何页面的右上角,单击您的个人资料照片,然后单击 “Settings(设置)”。
  2. 在左侧边栏中,单击 “Developer settings(开发者设置)”。
  3. 在左侧边栏中,单击 “Personal access tokens(个人访问令牌)”。
  4. 单击 “Generate new token(生成新令牌)”。
  5. 给令牌一个描述性名称。
  6. 选择要授予此令牌的作用域或权限。
  7. 要使用令牌从命令行访问仓库,请选择 “repo(仓库)”。
  8. 单击 “Generate token(生成令牌)”。
  9. 单击 “将令牌复制到剪贴板”。

请注意,离开此页面后,您将无法再次看到令牌,所以一定要保留好令牌。像对待密码一样对待您的令牌,确保其机密性。

2.2 找项目ID

第一步需要找项目的ID,这个不知道怎么找,我的方法是在gitlab项目上打开F12看控制台,看他们的接口访问的适合用的ID。
如图:110 就是项目ID,拿着项目ID能办很多事儿。
在这里插入图片描述

2.3 调接口

直接上代码了:

@Slf4j
@Service
public class GitLabApiCallService {@Resource(name = "initRestTemplate")private RestTemplate restTemplate;/*** 获取 项目下的文件 下的文件* @return*/public JSONArray getTree(Integer page) throws Exception{String gitLabToken = ModelConfig.getGitLabToken();String gitLabApiUrl = ModelConfig.getGitLabApiUrl();String projectId = "110";String directoryPath = "aaaaa";String baseUrl = String.format("%s/projects/%s/repository/tree?ref=master&path=%s&per_page=100&page="+page,gitLabApiUrl,projectId,directoryPath);// 设置请求头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));headers.set("Private-Token",gitLabToken);HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(null, headers);// 执行log.debug("url:{} , requestEntity: {} ", baseUrl, requestEntity);ResponseEntity<String> response = restTemplate.exchange(baseUrl, HttpMethod.GET, requestEntity, String.class);// 处理返回值if (response.getStatusCode() == HttpStatus.OK) {log.info("GET request successful");String body = response.getBody();if(StrUtil.isNotBlank(body)){JSONArray jsonArray = JSONArray.parseArray(body);log.debug("结果:{}",jsonArray);return jsonArray;} else {return null;}} else {log.error(" GET request failed");return null;}}/*** 查看提交记录* @return*/public JSONArray getCommit(String filePath)  throws Exception {String gitLabToken = ModelConfig.getGitLabToken();String gitLabApiUrl = ModelConfig.getGitLabApiUrl();String projectId = "110";String directoryPath = "aaaa";Integer per_page = 201000;String baseUrl = String.format("%s/projects/%s/repository/commits?ref_name=master&path=%s",gitLabApiUrl,projectId,filePath);// 设置请求头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));headers.set("Private-Token",gitLabToken);// 绑定请求头HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);// 执行log.debug("url:{} , requestEntity: {} ", baseUrl, requestEntity);ResponseEntity<String> response = restTemplate.exchange(baseUrl, HttpMethod.GET, requestEntity, String.class);// 处理返回值if (response.getStatusCode() == HttpStatus.OK) {log.info("GET request successful");String body = response.getBody();if(StrUtil.isNotBlank(body)){JSONArray jsonArray = JSONArray.parseArray(body);log.debug("结果:{}",jsonArray);return jsonArray;} else {return null;}} else {log.error("GET request failed");return null;}}
}

String gitLabToken = ModelConfig.getGitLabToken();
String gitLabApiUrl = ModelConfig.getGitLabApiUrl();
这些都是配置的全局变量,可以根据自己的环境配置。

上面的代码只是个例子:很多接口类同。

需要注意的是分页最多返回100条,如果需要获取全部数据,需要自己写递归啊循环啊啥的怎么方便怎么来。

若有错误,希望大佬指出。
对你有帮助给点个👍再走呗。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/83645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java Spring Boot验证码美化,白色背景 随机四个数 每个字随机颜色

我前文 Spring Boot2.7生成用于登录的图片验证码讲述了生成验证码的方法 但是这样生成验证码 非常难看 比较说 验证码是要展示到web程序中的 这样让用户看着 属实不太好 我们可以将接口改成 GetMapping(value "/captcha", produces MediaType.IMAGE_PNG_VALUE) …

Spring Task(简略笔记)

介绍 Spring Task是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 Corn表达式 corn表达式其实就是一个字符串&#xff0c;通过corn表达式可以定有任务触发的时间 构成规则&#xff1a;分为6或7个域&#xff0c;由空格分隔开&#xff0…

RocketMQ 发送事务消息

文章目录 事务的相关理论事务ACID特性CAP 理论BASE 理论 事务消息应用场景MQ 事务消息处理处理逻辑 RocketMQ 事务消息处理流程官网事务消息流程图 rocketmq-client-java 示例&#xff08;gRPC 协议&#xff09;创建事务主题生产者消费者 rocketmq-client 示例&#xff08;Remo…

代码随想录Day1 数组基础

本文详细说明和思路来源于: 代码随想录 视频讲解: 手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode&#xff1a;704. 二分查找_哔哩哔哩_bilibili Leetcode T 704 题目链接 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 题目概述1: 思路: 1.因…

基于微信小程序的高校宿舍信息管理系统设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

局域网下共享文件夹全流程

请注意&#xff1a;配置共享文件夹以便他人无需输入账户和密码访问可能带来安全风险。请确保你明白这一点并在适当的网络环境中操作。 以下说明是基于 Windows 系统的&#xff1a; 步骤 1&#xff1a;共享文件夹 找到你想要共享的文件夹&#xff0c;右击选择“属性”。 转到…

play() failed because the user didn‘t interact with the document优化媒体不能自动播放

1. 问题 谷歌浏览器 video 元素设置 autoplay&#xff0c;我们原意是希望页面加载时自动播放&#xff0c;但实际上并没有自动播放&#xff0c;在控制台报错如下&#xff1a; Uncaught (in promise) DOMException: play() failed because the user didn’t interact with the d…

Docker从认识到实践再到底层原理(六-1)|Docker容器基本介绍+命令详解

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

RabbitMQ学习总结(11)—— RabbitMQ 核心概念与架构

MQ 技术概述 什么是 MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游 “逻辑解耦+物理解耦” 的消息通信服务。使用…

怎样判断一个数是否为偶数

要求代码行数尽可能少; package mainimport ( "fmt" "strconv")func main(){ fmt.Printf("传入的值是否为奇数:%t\n",Judge_is_even(7))}func Judge_is_even(num int) bool { //fmt.Println(num % 2) rs, _ : strconv.ParseBool(strconv.Itoa(nu…

ClassName::methodName 是一个方法引用(Method Reference)的表示形式 主要用于简化Lambda表达式

在Java中&#xff0c;ClassName::methodName 是一个方法引用&#xff08;Method Reference&#xff09;的表示形式。这是Java 8引入的一个新特性&#xff0c;主要用于简化Lambda表达式。它允许你更简洁、更易读的方式引用一个已存在的方法。 方法引用分为以下几种类型&#xff…

网页的快捷方式打开自动全屏--Chrome、Firefox 浏览器相关设置

Firefox 的全屏方式与 Chrome 不同&#xff0c;Chrome 自带全屏模式以及APP模式&#xff0c;通过简单的参数即可设置&#xff0c;而Firefox暂时么有这个功能&#xff0c;Firefox 的全屏功能可以通过全屏插件实现。 全屏模式下&#xff0c;按 F11 不会退出全屏&#xff0c;鼠标…

grafana对指标进行组合计算

在使用Grafana配置图表看板时&#xff0c;我们可能需要对多个查询条件筛选出来的结果进行计算&#xff0c;把计算结果生成最终的图表。此时需要用到transform功能【add field from calculation】&#xff1a;

flutter iOS 缺少通知权限,缺少位置权限

App Store Connect 亲爱的开发者, 我们发现了一个或多个问题与您的应用程序&#xff0c;“hayya附近的朋友Chat&Meet”1.0.3(1)最近的交付。您的交付是成功的&#xff0c;但您可能希望在您的下一次交付纠正以下问题: ITMS-90078:缺少推送通知授权-你的应用程序似乎注册了…

pytorch的卷积层池化层和非线性变化 和机器学习线性回归

卷积层&#xff1a; 两个输出的情况 就会有两个通道 可以改变通道数的 最简单的神经网络结构&#xff1a; nn.Mudule就是继承父类 super执行的是 先执行父类函数里面的 forward执行的就是前向网络&#xff0c;就是往前推进的&#xff0c;当然也有反向转播&#xff0c;那就是…

福建福州大型钢结构件3D扫描全尺寸三维测量平面度平行度检测-CASAIM中科广电

高精度三维扫描技术已经在大型工件制造领域发挥着重要作用&#xff0c;特别是在质量检测环节&#xff0c;高效、高精度&#xff0c;可以轻松实现全尺寸三维测量。本期&#xff0c;我们要分享的应用是在大型钢结构件的关键部位尺寸及形位公差检测。 钢结构件&#xff0c;是将多…

fabic.js Quadratic Curve /可控制的曲线

需要绘制一条可控制的贝塞尔曲线&#xff0c;发现fabic官网中一个demo有点类似。感兴趣的可以移步官网查看demo。 官网的demo是对于html 而言的&#xff0c;放在vue中需要变换一下&#xff0c;具体代码如下&#xff1a; <template><div class"dashboard-contai…

Android Kotlin 协程详解

前言 关于Kotlin基础和高阶函数又不熟悉的可以先参考文章&#xff1a; Android Kotlin 基础详解_袁震的博客-CSDN博客 Android Kotlin 高阶详解_袁震的博客-CSDN博客 什么是协程&#xff1f;要理解协程&#xff0c;就要将它和线程联系起来理解。 线程是什么&#xff1f;我…

个人所思所想录

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…

Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审…