GCP环境下WorksheetFeed搭配spreadSheetUrl运行失效如何解决?
问题根源
你遇到的302跳转报错是Google正式关停旧版Google Sheets API v3(GData接口)导致的,该接口于2023年9月1日完全下线,原有基于gdata-client开发的访问逻辑全部失效,302跳转是接口关停后的默认跳转行为。
解决方案
1. 替换依赖包
首先移除项目中所有旧的gdata-core、gdata-spreadsheet相关依赖,替换为Google Sheets API v4的官方依赖,Maven配置示例如下:
<dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-sheets</artifactId> <version>v4-rev20230815-2.0.0</version> </dependency> <dependency> <groupId>com.google.oauth-client</groupId> <artifactId>google-oauth-client-java6</artifactId> <version>1.34.1</version> </dependency> <dependency> <groupId>com.google.oauth-client</groupId> <artifactId>google-oauth-client-jetty</artifactId> <version>1.34.1</version> </dependency>
2. 调整授权与客户端初始化逻辑
原有GData接口的service实例需要替换为Sheets v4的客户端实例,使用服务账号授权的示例代码如下:
// 加载服务账号密钥文件 GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("service-account-key.json")) .createScoped(List.of(SheetsScopes.SPREADSHEETS)); // 初始化Sheets客户端 Sheets sheetsService = new Sheets.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), new HttpCredentialsAdapter(credentials)) .setApplicationName("你的应用名称") .build();
3. 替换工作表读取逻辑
原有获取首个工作表的逻辑可以替换为以下代码:
String spreadsheetId = fileId; // 和你原来的fileId参数一致 // 获取表格的所有工作表信息 Spreadsheet spreadsheet = sheetsService.spreadsheets().get(spreadsheetId).execute(); Sheet firstSheet = spreadsheet.getSheets().get(0); // 读取工作表属性示例 Integer sheetId = firstSheet.getProperties().getSheetId(); String sheetTitle = firstSheet.getProperties().getTitle();
必要配置检查
- 登录GCP控制台进入对应项目,在「API和服务」-「启用API和服务」中搜索启用Google Sheets API
- 确保你的服务账号邮箱已被添加到对应谷歌表格的共享列表中,授予对应的查看/编辑权限
内容的提问来源于stack exchange,提问作者sleakerz
相关产品推荐
相关产品推荐

