我正在使用 Microsoft Graph API 从我的组织中获取用户。这是我到目前为止获取所有用户的内容:
TokenCredentialAuthProvider authProvider = new TokenCredentialAuthProvider(
Collections.singletonList("https://graph.microsoft.com/.default"),
clientSecretCredential
);
GraphServiceClient<Request> graphClient = GraphServiceClient
.builder()
.authenticationProvider(authProvider)
.buildClient();
List<User> allUsers = new LinkedList<>();
var usersPage = graphClient.users()
.buildRequest()
.get();
while (usersPage != null) {
usersPage.getCurrentPage().forEach(allUsers::add);
usersPage = usersPage.getNextPage() != null ?
usersPage.getNextPage().buildRequest().get() : null;
}
allUsers.forEach(user ->
System.out.println("User: " + user.displayName + " | ID: " + user.id)
);
现在,我需要过滤这些用户以仅检索与我的公司名称相关的用户,例如“XiaoZCorp”,其过滤器如下:
var usersPage = graphClient.users()
.buildRequest()
.filter("companyName eq 'XiaoZCorp'") // This line throws an error
.get();
但是,我收到此错误:
java: cannot find symbol
symbol: method filter(java.lang.String)
location: class com.microsoft.graph.requests.UserCollectionRequestBuilder
如何使用 Java SDK 中的 Microsoft Graph API 按公司名称正确过滤用户?
最初,我注册了一个应用程序并授予了
User.Read.All
Application 类型的权限,如下所示:
我在 Azure 门户中有以下用户,公司名称为“MSFT”:
要使用 Microsoft Graph Java SDK 获取这些用户详细信息,您可以使用以下示例代码:
package org.example;
import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.microsoft.graph.authentication.TokenCredentialAuthProvider;
import com.microsoft.graph.requests.GraphServiceClient;
import com.microsoft.graph.requests.UserCollectionPage;
import com.microsoft.graph.requests.UserCollectionRequestBuilder;
import com.microsoft.graph.requests.UserCollectionRequest;
import com.microsoft.graph.options.QueryOption;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
String clientId = "appId";
String clientSecret = "secret";
String tenantId = "tenantId";
ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
.clientId(clientId)
.clientSecret(clientSecret)
.tenantId(tenantId)
.build();
TokenCredentialAuthProvider authProvider = new TokenCredentialAuthProvider(
Collections.singletonList("https://graph.microsoft.com/.default"),
clientSecretCredential
);
GraphServiceClient graphClient = GraphServiceClient
.builder()
.authenticationProvider(authProvider)
.buildClient();
UserCollectionRequestBuilder requestBuilder = graphClient.users();
UserCollectionRequest request = requestBuilder
.buildRequest()
.select("companyName,id,displayName")
.filter("companyName eq 'MSFT'");
// Add ConsistencyLevel header
request.addHeader("ConsistencyLevel", "Eventual");
// Add $count query parameter
request.addQueryOption(new QueryOption("$count", "true"));
UserCollectionPage result = request.get();
// Print out the filtered users
result.getCurrentPage().forEach(user ->
System.out.println("User: " + user.displayName + " | ID: " + user.id)
);
}
}
回复:
确保添加
ConsistencyLevel : eventual
和 $count:true
标头,因为使用公司名称进行过滤需要 高级查询 功能。
参考: