【问题标题】:Deserialization error using Google cloud endpoint JS api Client使用谷歌云端点 JS api 客户端的反序列化错误
【发布时间】:2013-03-19 06:27:53
【问题描述】:

我已经设置了一个带有端点的本地应用引擎。使用 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);
}

发送到服务器的payload是:

[{"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} 时,我的端点被调用就好了。

似乎我做错了什么,但是什么?

另请参阅 Owned entity causing json serialization error in Google javascript api client

【问题讨论】:

    标签: google-app-engine google-cloud-endpoints


    【解决方案1】:

    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 中创建的 branch 中将其合并到我们的示例应用程序中。有关详细信息,请参阅commit。注意:我随后创建了commit 以摆脱 Auth/https,因此它在 dev_appserver 中运行。

    Java:

    待定

    【讨论】:

      猜你喜欢
      • 2013-04-15
      • 2018-03-26
      • 2017-11-23
      • 2019-05-08
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2020-05-16
      相关资源
      最近更新 更多