2

キーを含むオブジェクトを 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"
}

しかし、エンドポイント内のコードが実行されるため、フロントエンドのエラーのみが発生します。

4

1 に答える 1

0

キーが json にシリアル化されると、Key.class から getAppId() を呼び出そうとします。

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

ご覧のとおり、このゲッターは appIdnamespace にアクセスしようとしますが、この場合は null である可能性があります。appIdnamespace を明示的に設定することはできませんが、KeyFactory を使用してキーを作成するとき、またはデータストアがオブジェクトを永続化した後に生成されます。

この ID オブジェクトを返すメソッドのコードを投稿していないため、ユーザー キーに appIdnamespace が設定されていない理由はわかりませんが、永続化されたオブジェクトを返していないのではないかと思います。または、キーが正しく作成されていない可能性があります。

于 2014-04-20T17:16:14.343 に答える