如何使用 Java 更新用户的 externalId

How to update a user's externalId using Java

我正在尝试根据 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' APIs explorer 并在那里填写 ExternalId 时,我得到了相同的行为。看起来 Google API 正在接受更新请求但忽略了 ExternalId。向用户添加 externalId 的正确方法是什么?

编辑:

SGC 的回答帮助了我。 setExternalIds 方法需要一个 ExternalIds 列表,我忘了这样做。 Google Java目录API在获取externalIds时似乎return一个json对象,所以需要解析它才能读取。

当更新用户的外部ID时,如果JSON设置不正确,它不会被保存(尽管它给出了200响应)。如果您尝试向该用户发送获取请求,则在响应中看不到更新后的值。

尝试使用“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步中,在"Authorize APIs"左边空白处输入https://www.googleapis.com/auth/admin.directory.user,然后点击"Authorize APIs"。

3.In第2步,点击"exchange code for tokens"

  1. 第3步,select HTTP method:PUT,给请求URI值:https://www.googleapis.com/admin/directory/v1/users/userKey(giver userkey值)。

5.click 在 "enter request body" 上构建 json:

{"externalIds":[{"value":"shaggynetwork","type":"network"}]}

6.CLICK "send request"。

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

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