使用MS Graph API for Java获取用户所属组名称失败求助
问题
我尝试通过MS Graph API for Java获取某用户的组成员身份。该用户属于7个组,但我仅能获取到组ID(UUID格式),displayName始终为null。请问如何获取组名称?
初始代码
User usr = gsc.users(MYUSERID).buildRequest().get(); System.out.println("User: " + usr.displayName); DirectoryObjectCollectionWithReferencesPage doc = gsc.users(MYUSERID).memberOf().buildRequest().get(); java.util.List<DirectoryObject> lst = doc.getCurrentPage(); for (int i = 0; i < lst.size(); i ++) { if (lst.get(i) instanceof Group) { Group gp = (Group) lst.get(i); System.out.println("Member: " + gp + " / " + gp.id + " / " + gp.displayName); } }
输出结果
User: MyTestUser Member: com.microsoft.graph.models.Group@c514b123 / 83091123-c2ea-4883-8a2b-faab7de7433 / null ...
后续尝试(均无效)
- 写法1:
for (int i = 0; i < lst.size(); i ++) { System.out.println(((Group)doc.getCurrentPage().get(i)).displayName); }
- 写法2:改用
memberOfAsGroup
GroupCollectionPage doc = gsc.users(this.azureuserid).memberOfAsGroup().buildRequest().get(); java.util.List<Group> lst = doc.getCurrentPage(); for (int i = 0; i < lst.size(); i ++) { Group gp = lst.get(i); System.out.println(i + " Member: " + gp + " / " + gp.id + " / " + gp.displayName + " " + gp.description); }
解决方案
问题根源是MS Graph API的默认返回规则:调用memberOf或memberOfAsGroup时,API仅返回资源的核心属性(如id),不会自动包含displayName、description这类扩展属性,必须显式指定要获取的字段。
修改后的代码示例
通过select方法声明需要的属性,比如id、displayName、description:
GroupCollectionPage doc = gsc.users(this.azureuserid) .memberOfAsGroup() .buildRequest() .select("id,displayName,description") // 明确指定要返回的属性 .get(); java.util.List<Group> lst = doc.getCurrentPage(); for (int i = 0; i < lst.size(); i++) { Group gp = lst.get(i); System.out.println(i + " Member: " + gp.id + " / " + gp.displayName + " " + gp.description); }
关键说明
- 必须用
select()方法指定需要的属性,否则Graph API不会返回对应字段,导致Java对象中该属性值为null。 - 若需要更多组属性,直接在
select参数中添加对应的属性名称即可,多个属性用逗号分隔。
内容的提问来源于stack exchange,提问作者chris01
相关产品推荐
相关产品推荐

