将密钥发送到App Engine端点

时间:2013-02-21 16:06:07

标签: java google-app-engine google-cloud-endpoints

我正在尝试将对象发送到包含密钥的Google App Engine端点。但是该对象无法反序列化。这是我得到的错误:

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"
}

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

1 个答案:

答案 0 :(得分:0)

当密钥序列化为json时,它将尝试从Key.class调用getAppId()

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

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

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