2013-03-17 105 views
4

我已經建立了一個帶有端點的本地appengine。使用curl我成功地測試endponts這樣的:使用谷歌雲端點JS api的反序列化錯誤客戶端

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}

似乎我做錯了什麼,但什麼?

參見 Owned entity causing json serialization error in Google javascript api client

回答

1

的Python:

這似乎是與Java後端的問題,Python的終點,我實現了一個使用一個名爲Total類來保存數據的API:

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,你包括完美的作品。

我把它加入到我的示例應用程序中,我在我的叉子上製作了一個branch。具體細節請參閱commit。注:我做了後續commit擺脫Auth/https,因此它在dev_appserver運行。

的Java:

TBD