Java中MSGraph V5.6迁移至V6的两个方法适配问题
升级Microsoft Graph Java SDK V5.6到V6.x的两个问题解决
1. 更新文件元数据(获取ListId并适配V6 API)
V6.x中更新列表项字段需要显式指定listId,你可以先通过文件ID获取对应的ListItem,从中提取ListId后再执行更新操作:
修正后的代码
protected static synchronized FieldValueSet postTagsToFile(GraphServiceClient graphClient, String driveId, String fileId, Map<String, String> metadata) { // 获取文件对应的ListItem,仅请求listId字段以提升性能 ListItem listItem = graphClient.drives(driveId).items(fileId).listItem() .buildRequest() .select("list/id") .get(); String listId = listItem.list.id; // 构建待更新的字段集合 FieldValueSet fieldValueSet = new FieldValueSet(); metadata.forEach((key, value) -> { if (!value.isEmpty()) { fieldValueSet.additionalDataManager().put(key, new JsonPrimitive(value)); } }); // 使用listId执行字段更新 return graphClient.drives(driveId).lists(listId).items(fileId).fields() .buildRequest() .patch(fieldValueSet); }
核心说明
- V6.x调整了列表项字段更新的API路径,必须指定
listId,路径为/drives/{drive-id}/lists/{list-id}/items/{item-id}/fields - 通过
select("list/id")精准请求所需字段,避免不必要的数据传输
2. 上传文件到指定位置(适配V6.x API)
V6.x简化了文件上传流程,无需预先创建空DriveItem,可直接定位目标路径并完成内容上传:
修正后的代码
public static String uploadFileToSharedSP(String fileName, String mimeType, String fileContent, String location) throws IOException { // 拼接完整目标路径:指定位置 + 文件名 String fullPath = location.endsWith("/") ? location + fileName : location + "/" + fileName; // 直接上传内容到目标路径,自动创建文件 DriveItem createdDriveItem = graphClient.sites(SHARED_SITE_ID).drive() .root() .itemWithPath(fullPath) .content() .buildRequest() .put(fileContent.getBytes()); return createdDriveItem.webUrl + "?web=1"; }
核心说明
- 该操作一站式完成文件创建与内容上传,若目标路径存在同名文件会直接覆盖
- 若需避免覆盖,可添加
If-None-Match: *请求头,当文件已存在时返回412错误
内容的提问来源于stack exchange,提问作者rread
相关产品推荐
相关产品推荐

