エンドポイントを使用してローカル appengine をセットアップしました。CURL を使用して、次のようにエンドポイントを正常にテストします。
C:\Program Files>curl.exe --header "Content-Type: application/json" -X POST -d "{g:\"test\",u:1,l:{x:1,y:1}}" http://localhost:8888/_ah/api/myapp/v1/move
私が得る応答は期待通りです:
{
"g" : "test",
"u" : 1,
"l" : {
"x" : 1,
"y" : 1
}
}
JS クライアントに行って同じことをしようとすると、奇妙なことが起こり始めます。Javascript からエンドポイントを呼び出すと、ネストされた要素「l」がデシリアライズに失敗するようです。なぜだろう?
これは、コンソールに表示されるエラー メッセージです。
500 (Can not deserialize instance of java.lang.String out of START_OBJECT token at [Source: N/A; line: -1, column: -1])
これが、エンドポイントを呼び出す JS 関数です。
function init() {
var myapp = 'http://localhost:8888/_ah/api';
gapi.client.load('myapp', 'v1', function() {
var payload = {g:"Test",u:0,l:{x:4,y:4}};
gapi.client.myapp.unit.move(payload).execute(function(resp) {
console.log(resp);
});
}, myapp);
}
サーバーに送信されるペイロードは次のとおりです。
[{"jsonrpc":"2.0","id":"gapiRpc","method":"myapp.unit.move","params":{"g":"Test","u":0,"l":{"x":4,"y":4}},"apiVersion":"v1"}]
ペイロードからを削除するとl:{x:4,y:4}
、エンドポイントが正常に呼び出されます。
私は何か間違ったことをしているようですが、何ですか?
Google JavaScript API クライアントで json シリアライゼーション エラーを引き起こす所有エンティティも参照 してください。