如何使用Java更新用户的externalId

我正在尝试使用基于Google Admin SDK文档的externalId更新用户。

UserExternalId externalId = new UserExternalId(); externalId.setType( "account" ); externalId.setValue( "test" ); User user = new User(); user.setExternalIds( externalId ); try { User update = directory.users().update( "USERKEY", user ).execute().setExternalIds( externalId ); LOGGER.info("Response from google: " + update.toPrettyString()); User full = directory.users().get( "USERKEY" ).setProjection( "full" ).execute(); LOGGER.info( "Response from new get user: " + full.toPrettyString() ); } catch (IOException e) { LOGGER.info("Error: " + e); } 

在更新调用上记录响应时,我可以看到externalId已填入并且不会引发任何错误。 当我尝试获得相同的用户时,没有externalId的痕迹。

当我使用Google的API资源管理器并填写ExternalId时,我会得到相同的行为。 看起来Google API正在接受更新请求,但忽略了ExternalId。 将externalId添加到用户的正确方法是什么?

编辑:

SGC的回答帮助了我。 setExternalIds方法需要一个ExternalIds列表,我忘了这样做。 Google Java Directory API似乎在获取externalIds时返回一个json对象,因此有必要对其进行解析以读取它。

更新用户的外部标识时,如果未正确设置JSON,则不会保存(尽管它会给出200响应)。 如果您尝试向此用户发送get请求,则在响应中看不到更新的值。

尝试使用“ Oauth Play ground ”发送请求,您可以在发送请求时构建JSON。

我尝试在“Users.update”请求中使用{“externalIds”:[{“value”:“shaggynetwork”,“type”:“network”}]}。 在“Users.get”中,响应是:

 HTTP/1.1 200 OK Content-type: application/json; charset=UTF-8 { "externalIds": [ { "type": "network", "value": "shaggynetwork" } 

]

脚步:

  1. 点击https://developers.google.com/oauthplayground/ 。

  2. 在步骤1中,在空白处的“授权API”左侧提供https://www.googleapis.com/auth/admin.directory.user ,然后单击“授权API”。

3.在步骤2中,单击“令牌交换代码”

  1. 在步骤3中,选择HTTP方法:PUT,给出请求URI值: https : //www.googleapis.com/admin/directory/v1/users/userKey(给予用户键值)。

5.点击“输入请求体”,构建json:

{ “外部ID”:[{ “值”: “shaggynetwork”, “类型”: “网络”}]}

6.点击“发送请求”。

在文档中,它不清楚如何更新外部id。

如果您需要任何帮助,请告诉我。