GAE / J: как получить объект User из идентификатора пользователя?Alt: почему я не могу установить псевдоним для объекта User? - PullRequest
1 голос
/ 27 марта 2012

Предположим, в Java Google App Engine (GAE / J) я использую com.google.appengine.api.users.UserService, чтобы получить объект User для текущего пользователя.

Я хочу отправить информацию об этом пользователе клиенту; однако, поскольку я использую Google Web Toolkit (GWT), мне нужен объект, который я могу сериализовать, и пользователь не является одним из них, поскольку он принадлежит пакету сервера.

Поэтому я создаю новый класс в своем общем каталоге GWT, который называется, скажем, UserStuff, и я копирую поля User в экземпляр UserStuff и отправляю его клиенту.

Позже клиент отправляет мне объект UserStuff, и я хочу присоединить пользователя как свойство сущности. Единственный способ сделать объект User, который я могу найти, - это вызвать конструктор для самого пользователя; то есть ничто в API UserService не получит полностью сформированный объект User для меня, скажем, от идентификатора пользователя (полученного из 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

Теперь я могу вместо этого отправить клиенту токен обратно с надписью «получить текущего пользователя и использовать его», но это неуклюже. Кроме того, это еще более проблематично, если у меня есть сущности, к которым подключено несколько пользователей, и я хочу отправить их клиенту, а клиент должен отправить мне еще несколько объектов для помещения в хранилище данных, к которому должны присоединиться другие пользователи. .

Один из способов сделать это - просто создать сущность UserStuff для каждого пользователя, а когда я получу пользователя в качестве текущего пользователя, зарегистрировать пользователя как поле в объекте UserStuff этого пользователя вместе с идентификатором пользователя! User. Затем, когда мне нужен объект User для идентификатора пользователя, я могу получить объект UserStuff для этого идентификатора пользователя, а затем получить объект User пользователя как свойство объекта UserStuff. Или я мог бы просто поставить псевдоним на объекте UserStuff. Однако это большой трафик хранилища данных только потому, что я не могу установить псевдоним для объекта User.

1 Ответ

3 голосов
/ 27 марта 2012

Невозможно получить объект пользователя с данным идентификатором, если вы не сохранили исходный объект пользователя в хранилище данных. Кроме того, нет способа изменить ник у пользователя.

Объект User предназначен только для инкапсуляции базовой информации о зарегистрированном пользователе; если вам нужна дополнительная информация или поведение (например, псевдоним, заданный пользователем), вам следует создать собственную модель UserInfo и использовать ее вместо этого. Вы можете установить в качестве имени его ключа идентификатор пользователя объекта пользователя, чтобы найти UserInfo для вошедшего в систему пользователя с помощью простой операции get.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...