2

我试图向包含密钥的 Google App Engine Endpoints 发送一个对象。但是该对象不能被反序列化。这是我得到的错误:

java.io.IOException:     com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: 
(was java.lang.NullPointerException) 
(through reference chain:
Form["identity"]->FormsIdentity["user"]->User["key"]->com.google.appengine.api.datastore.Key["appId"])

这是我发送的对象:

    "identity":{
    "user":
    {
       "key" : {
              "kind" : "User",
              "appId" : "no_app_id",
              "id" : "1",
              "complete" : true,
              "namespace" : ""
            },
      "googleID" : "8493582",
      "emailAddress" : "xxxxx@gmail.com",
      "credential" : "xxxx@gmail.com"
    },
    "deviceID":"4234o34i523534"
}

但我只收到前端的错误,因为端点内的代码已执行。

4

1 回答 1

0

当 key 被序列化为 json 时,它会尝试从 Key.class 调用 getAppId()

  public String getAppId() {
    return appIdNamespace.getAppId();
  }

如您所见,此 getter 尝试访问 appIdnamespace,在您的情况下可能为 null。appIdnamespace 不能不显式设置,但它是在您使用 KeyFactory 创建密钥时或在数据存储区持久化对象之后生成的。

由于您没有发布返回此身份对象的方法的代码,我不确定为什么您的用户密钥没有设置 appIdnamespace,但我的猜测是您没有返回已持久化的对象或者密钥没有正确创建。

于 2014-04-20T17:16:14.343 回答