我已经搭建了一个带有Endpoints的本地App Engine。使用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序列化错误。