Java 将密钥发送到应用程序引擎终结点

Java 将密钥发送到应用程序引擎终结点,java,google-app-engine,google-cloud-endpoints,Java,Google App Engine,Google Cloud Endpoints,我正在尝试向谷歌应用程序引擎端点发送一个包含密钥的对象。但无法反序列化该对象。这就是我得到的错误: java.io.IOException: com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: Form["identity"]->FormsIdent

我正在尝试向谷歌应用程序引擎端点发送一个包含密钥的对象。但无法反序列化该对象。这就是我得到的错误:

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

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

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

  public String getAppId() {
    return appIdNamespace.getAppId();
  }
正如您所看到的,这个getter试图访问appIdnamespace,在您的例子中,它很可能为null。无法显式设置appIdnamespace,但它是在使用KeyFactory创建密钥时生成的,或者在数据存储已持久化该对象之后生成的

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