我正在尝试将对象发送到包含密钥的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"
}
但是我只得到了前端的错误,因为端点内的代码已经执行了。
答案 0 :(得分:0)
当密钥序列化为json时,它将尝试从Key.class调用getAppId()
public String getAppId() {
return appIdNamespace.getAppId();
}
正如您所看到的,此getter尝试访问appIdnamespace,在您的情况下可能为null。无法显式设置appIdnamespace,但是在使用KeyFactory创建密钥时或在数据存储区持久保存对象后生成appIdnamespace。
由于您没有发布返回此标识对象的方法的代码,因此我不确定您的用户密钥为何没有设置appIdnamespace,但我的猜测是您不返回已持久化的对象或未正确创建密钥。