【问题标题】:Send Key to App Engine Endpoint将密钥发送到 App Engine 端点
【发布时间】:2013-02-21 16:06:07
【问题描述】:

我正在尝试向 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"
}

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多