You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Graph Java SDK v6迁移后如何列出SharePoint文件夹?

解决MS Graph Java SDK v6列出SharePoint文件夹的问题

问题原因

在v6版本中,SDK默认不会自动加载关联资源(比如文件夹的子项),直接调用getChildren()会返回null——因为这部分数据没有被请求回来,需要显式指定要展开(expand)children资源,或者直接请求子资源集合。

正确实现方式

方式1:对应v5原逻辑(Site + Drive路径)

直接请求根目录的子资源集合,还可以筛选仅返回文件夹类型的项:

DriveItemCollectionResponse response = client.sites("<site_url>")
    .drives("<folder_drive_id>")
    .root()
    .children()
    .get(requestConfiguration -> {
        // 可选:仅筛选文件夹,过滤掉文件
        requestConfiguration.queryParameters.filter = "folder ne null";
    });

List<DriveItem> childFolders = response.getValue();
// 遍历处理子文件夹
for (DriveItem item : childFolders) {
    System.out.println("文件夹名称:" + item.getName());
}

方式2:直接通过Drive ID请求

如果要沿用你尝试的drives().byDriveId()路径,有两种可行写法:

// 写法A:直接请求根目录的子资源集合(推荐,更高效)
DriveItemCollectionResponse response = client.drives()
    .byDriveId("<folder_drive_id>")
    .root()
    .children()
    .get(requestConfiguration -> {
        requestConfiguration.queryParameters.filter = "folder ne null";
    });

List<DriveItem> childFolders = response.getValue();

// 写法B:先获取根目录并展开children资源(适合需要同时获取根目录信息的场景)
DriveItem rootFolder = client.drives()
    .byDriveId("<folder_drive_id>")
    .root()
    .get(requestConfiguration -> {
        requestConfiguration.queryParameters.expand = Arrays.asList("children");
    });

List<DriveItem> childFolders = rootFolder.getChildren(); // 此时不会返回null

关键说明

  • v6 SDK去掉了buildRequest()方法,改为直接通过资源路径链式调用,再用.get()发起请求。
  • 添加filter=folder ne null可以只返回文件夹,减少数据传输量,提升请求效率。
  • 优先选择直接请求children()集合的方式,比先获取根目录再取子项更高效。

内容的提问来源于stack exchange,提问作者PastorPL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 21:57:19