有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javagae/J:如何从userid获取用户对象?Alt:为什么我不能在用户对象上设置昵称?

假设在Java谷歌应用程序引擎(GAE/J)中,我使用com。谷歌。阿彭金。应用程序编程接口。用户。UserService获取当前用户的用户对象

我想把这个用户的信息发送给客户;然而,因为我使用的是Google Web Toolkit(GWT),所以我需要一个可以序列化的对象,而User不是其中之一,因为它属于一个服务器包

因此,我在GWT共享目录中创建了一个名为UserStuff的新类,并将User字段复制到UserStuff的实例中,然后将其发送给客户端

稍后,客户端将UserStuff对象发送回我,我希望将用户作为实体的属性附加。我能找到的创建用户对象的唯一方法是为用户自己调用构造函数;也就是说,UserService API中的任何内容都不会从用户id(从User.getUserId()获取)中获取完整格式的用户对象

所以我使用User的构造函数创建了一个User对象。这些构造函数都不允许我在用户上设置昵称字段,也没有方法可以这样做https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/users/User

现在,我可以让客户端发回一个令牌,上面写着“获取当前用户并使用它”,但这很笨拙。此外,如果我有多个用户连接到的实体,我想将它们发送到客户机,并让客户机将更多对象发送回数据存储,以放入应该有其他用户连接到该实体的数据存储,那么问题就更大了

一种方法是为每个用户创建一个UserStuff实体,当我将该用户作为当前用户时,将该用户作为该用户的UserStuff对象上的一个字段与该用户的!user-id。然后,当我想要用户对象作为用户id时,我可以获取该用户id的UserStuff对象,然后获取用户的用户对象作为UserStuff对象的属性。或者我可以把昵称放在UserStuff对象上。然而,这是大量额外的数据存储流量,因为我无法在用户对象上设置昵称


共 (1) 个答案

  1. # 1 楼答案

    除非将原始用户对象存储在数据存储中,否则无法获得给定ID的用户对象。同样,也无法更改用户的昵称

    用户对象仅用于封装登录用户的基本信息;如果您想要额外的信息或行为(例如用户集昵称),您应该创建自己的UserInfo模型,并使用它。您可以将其密钥名设置为用户对象的用户ID,这样就可以通过简单的get操作找到登录用户的UserInfo