Google管理员SDK:目录用户:如何使用Java客户端获取用户电话号码?

时间:2014-07-08 06:46:43

标签: jackson google-api-java-client google-admin-sdk

我使用服务帐户成功进行身份验证,并可以在我公司的Google Directory中列出用户。

但是我想列出用户'电话号码。

我使用java quickstart example code并且它有效。但是,它只打印用户的主电子邮件地址。

我想使用User.getPhones()方法获取每个用户的电话号码列表/数组,但Java API返回" Object"见the Google java API

我知道Google请求的真实结果是JSON,而用户有一个电话数组,其中包含"类型"和"价值"例如work:num(Admin SDK User Representation

我知道Google Java客户端正在使用Google特定的Jackson2实现,

com.google.api.client.json.jackson2.JacksonFactory

如何影响它以生成UserPhone对象而不仅仅是java.lang.Object?

干杯 卡尔

1 个答案:

答案 0 :(得分:4)

我提出了以下方法来翻译Admin SDK中List ArrayMaps<String,Object>个{0}}对象的通用import com.google.api.client.json.GenericJson; import com.google.api.client.util.ArrayMap; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; 。 它需要以下导入:

public <T extends GenericJson> List<T> parse(Object genericItem, Class<T> clazz){
     List<T> result = new ArrayList<T>();
     if (genericItem != null){
         try {
             Constructor<T> constructor = clazz.getConstructor(new Class[0]);    // find the default constructor of the input class type
             List<ArrayMap<String,Object>> objects = (List<ArrayMap<String,Object>>)genericItem;
             for (ArrayMap<String,Object> object: objects){
                T id = constructor.newInstance(); // call the default constructor
                for (int i = 0; i < object.size(); i++)
                    id.put(object.getKey(i), object.getValue(i));
                result.add(id);
            }
        } catch (NoSuchMethodException ex) {
               Logger.getLogger(ListArrayMapParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SecurityException ex) {
            Logger.getLogger(ListArrayMapParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(ListArrayMapParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(ListArrayMapParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
            Logger.getLogger(ListArrayMapParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(ListArrayMapParser.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    return result;
}

这是进行解析的方法:

List<UserPhone> phones = parser.parse(user.getPhones(), UserPhone.class);
List<UserExternalId> externalIds = parser.parse(user.getExternalIds(),    UserExternalId.class);
List<UserOrganization> organizations = parser.parse(user.getOrganizations(), UserOrganization.class);
List<UserEmail> userEmails = parser.parse(user.getEmails(), UserEmail.class); 

这样的工作原理如下:

user.setPhones(phones)

完成此操作后,您可以更新手机,externalIds,...然后执行{{1}},用户对象将在保存时处理新对象。

我认为您今天可以让API自动为您返回解析结果。