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