如何使用Microsoft图形API获取自定义扩展属性

时间:2020-05-13 05:48:13

标签: java spring-boot azure-active-directory microsoft-graph-api

我正在尝试通过Microsoft-Graph获取用户详细信息

我正在寻找响应中的自定义扩展元素,例如“ extension_3a4189d71ad149c6ab5e65ac45bd6add_MyAttribute1”

当我使用String检索响应时,我可以看到所有元素。

final ResponseEntity<String> response = restTemplate.exchange("http://graph.windows.net/tenant.com/me?api-version=1.6, HttpMethod.GET, new HttpEntity(headers),String.class);

但是当我使用com.microsoft.graph.models.extensions.User检索响应时,我再也看不到扩展了。

final ResponseEntity<User> response = restTemplate.exchange("http://graph.windows.net/tenant.com/me?api-version=1.6, HttpMethod.GET, new HttpEntity(headers),User.class);

与进入String对象并一一查找元素相比,我如何以更优雅的方式检索自定义扩展?

2 个答案:

答案 0 :(得分:1)

因为扩展属性是特定于您的租户的,这意味着它是非标准的,因此在sdk中没有开箱即用的“对象类”会包含它,因为它附加了应用程序ID。 extension_appid_attribname。 因此您必须自己处理。您可以尝试扩展用户类,并添加一种方法来读取或反序列化/映射来自图api的json返回,这与Hury建议的类似,或类似的效果。不可能有一个开箱即用的解决方案。 如果您确实不想手动映射对象,那么还有一些json库可以帮助您反序列化某种动态对象。

更新: 我进一步研究了这一点。我不认为它在extensions.extension中,但是我确实发现在Java SDK中可以访问它。这里是文档:https://github.com/microsoftgraph/msgraph-sdk-java/wiki/Working-with-Open-Types
你会做类似

String ext = 
    user
        .additionalDataManager()
        .get("extension_2lkj3l12jl3j2kj3_yourproperty")
        .getAsString();

尝试一下 希望有帮助。

答案 1 :(得分:0)

请使用api https://graph.microsoft.com/beta/users 而不是 https://graph.microsoft.com/v1.0/users api https://graph.microsoft.com/beta/users 将返回包含用户自定义数据的所有数据。