java - GAE/J : how do I get a User object from the user-id? 替代 : how come I can't set the nickname on a User object?

标签 java google-app-engine gwt

假设在 Java Google App Engine (GAE/J) 中,我使用 com.google.appengine.api.users.UserService 获取当前用户的用户对象。

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

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

稍后客户端将 UserStuff 对象发回给我,我想将用户附加为实体的属性。我能找到的创建 User 对象的唯一方法是自己调用 User 的构造函数;也就是说,UserService API 中的任何内容都无法仅通过用户 ID(从 User.getUserId() 获取)为我获取完整的用户对象 https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/users/UserService

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

现在,我可以改为让客户端发回一个 token ,说“获取当前用户并使用它”,但这很笨拙。此外,如果我有多个用户附加到它们的实体并且我想将它们发送给客户端并让客户端发回更多对象以放入应该有其他用户附加到该实体的数据存储区,那就更成问题了.

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

最佳答案

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

User对象只是为了封装登录用户的基本信息而设计的;如果你想要额外的信息或行为(比如用户设置的昵称),你应该创建你自己的 UserInfo 模型,并使用它来代替。您可以将其键名设置为用户对象的用户 ID,这样您就可以通过简单的获取操作找到登录用户的 UserInfo。

关于java - GAE/J : how do I get a User object from the user-id? 替代 : how come I can't set the nickname on a User object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9885331/

相关文章:

Java、LWJGL、OpenGL 1.1、将BufferedImage解码为Bytebuffer并跨类绑定(bind)到OpenGL

java - 搜索 ArrayList

java - Android如何为计算数字总和的程序设置结果的最大限制?

java - 我们需要在 Java 中初始化数组吗?

android - 将网络应用程序移植到Phonegap的路径问题

python - 在 GQL (Google App Engine) 上获取 4 个不重复的最新结果

升级到 GWT 2.0/Google 应用引擎 1.2.8 后打开工作区时 Eclipse 挂起

javascript - 将用户 ID 传递给 core-ajax 方法 GET 以检索 Google Cloud 存储中的数据

java - 设置 DateTimeItem 的范围限制

java - 使用 java gwt 生成内联图像