【问题标题】:Google App Engine - How do you persist Google User type with Objectify?Google App Engine - 您如何使用 Objectify 保留 Google 用户类型?
【发布时间】:2014-08-12 03:25:26
【问题描述】:

Google 声明 Google App Engine Datastore 支持以下类型。

Java Properties and value types

其中有com.google.appengine.api.users.User

但是,当我尝试保留我的实体时,它会抛出以下异常。

[INFO] java.lang.NullPointerException
[INFO]  at com.google.storage.onestore.v3.OnestoreEntity$PropertyValue$UserValue.setAuthDomain(OnestoreEntity.java:1145)
[INFO]  at com.google.appengine.api.datastore.DataTypeTranslator$UserType.toV3Value(DataTypeTranslator.java:994)
[INFO]  at com.google.appengine.api.datastore.DataTypeTranslator.addPropertyToPb(DataTypeTranslator.java:165)
[INFO]  at com.google.appengine.api.datastore.DataTypeTranslator.addPropertiesToPb(DataTypeTranslator.java:138)
[INFO]  at com.google.appengine.api.datastore.EntityTranslator.convertToPb(EntityTranslator.java:61)
[INFO]  at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$4.toPb(AsyncDatastoreServiceImpl.java:203)
[INFO]  at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$4.toPb(AsyncDatastoreServiceImpl.java:180)
[INFO]  at com.google.appengine.api.datastore.Batcher$BatchIterator.<init>(Batcher.java:177)
...

我尝试使用我自己的服务向 Objectify 注册它,但它只会说找不到实体,这并不奇怪,因为它没有使用 Objectify 的 @Entity 进行注释。

如何使用 Objectify 持久化 Google 用户类型?

** 更新 **

我似乎也遇到了其他 Google 类型的问题。

例如com.google.appengine.api.datastore.Email

实体类

package com.propertywrassler.webservice.maintenance;

import com.google.api.server.spi.response.BadRequestException;
import com.google.appengine.api.users.User;
import com.googlecode.objectify.annotation.Entity;
import com.propertywrassler.webservice.util.ErrorMessage;
import com.propertywrassler.webservice.util.PropertyWrasslerChildEntity;
import lombok.Getter;
import lombok.Setter;
import org.joda.time.DateTime;

@Entity
public class Comment extends MyChildEntity<ThingYouComment, Comment> {

    @Getter @Setter private User author;
    @Getter @Setter private DateTime timeStamp = new DateTime();
    @Getter @Setter private String text;

    @Override
    public void validate() throws BadRequestException {
        super.validate();
        if (author == null) {
            throw new BadRequestException(ErrorMessage.requiredField("author"));
        }
        if (text == null) {
            throw new BadRequestException(ErrorMessage.requiredField("text"));
        }
    }

}

在服务中我坚持这样。一切正常,直到服务。端点正确地序列化了对象。用户对象是完美的。问题出在下面一行。

ofy().save().entity(comment).now();

【问题讨论】:

  • 粘贴您正在使用的代码可能会更好。
  • @BeroDotnet 粘贴了所有相关内容。如果您还需要更多信息,请告诉我。但这看起来像是一个 Objectify 问题。
  • 与Objectify无关;您可以从堆栈跟踪中看到,Objectify 将用户对象按原样传递到 GAE 低级 API,并且低级 API 将其识别为用户对象。看起来 User.authDomain 的值为 null。

标签: java google-app-engine google-cloud-datastore objectify


【解决方案1】:

我尝试使用 Cloud Endpoint 资源方法传递的用户对象 作为作者一切正常的值。

似乎从 JS 客户端传递 JSON User 对象与从服务器实例传递 User 对象不一样。它们没有相同的字段,甚至共享字段也有不同的名称。例如在 JS 客户端,Googe 用户类型调用用户 ID id,但在 Java 后端,它被称为 userId

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 2017-03-02
    • 2014-08-09
    • 1970-01-01
    • 2012-05-05
    • 2012-06-14
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    相关资源
    最近更新 更多