使用谷歌云端点JS api客户端的反序列化错误



我已经设置了一个带有端点的本地应用引擎。我使用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序列化错误的私有实体

Python:

这似乎是Java后端的一个问题,对于Python端点,我实现了一个API,它使用一个名为Total的类来保存数据:

from protorpc import messages
class LeftRight(messages.Message):
    x = messages.IntegerField(1)
    y = messages.IntegerField(2)
class Total(messages.Message):
    g = messages.StringField(1)
    u = messages.IntegerField(2)
    l = messages.MessageField(LeftRight, 3)

,然后有一个虚拟端点,它只返回它接收到的Total对象

...
@endpoints.method(Total, Total,
                  path='total', http_method='POST',
                  name='total.total')
def total(self, request):
    return request

,它可以完美地使用你所包含的相同的Javascript。

我将其合并到我在fork中创建的分支中的示例应用程序中。有关细节,请参阅提交。注意:我做了一个后续的提交,以摆脱Auth/https,使其在dev_appserver中运行。

<标题> Java:

TBD

相关内容

  • 没有找到相关文章

最新更新