如何使用Java更新用户的externalId

时间:2015-01-09 12:31:37

标签: java google-admin-sdk google-directory-api google-apis-explorer

我正在尝试使用基于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 Directory API似乎在获取externalIds时返回一个json对象,因此需要对其进行解析才能读取它。

1 个答案:

答案 0 :(得分:1)

更新用户的外部ID时,如果未正确设置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. 3.在第2步中,点击“代码兑换代码”

    1. 在步骤3中,选择HTTP方法:PUT,提供请求URI值:https://www.googleapis.com/admin/directory/v1/users/userKey(giver userkey value)。
    2. 5.点击“输入请求体”,构建json:

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

      6.点击“发送请求”。

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

      如果您需要任何帮助,请与我联系。