2013-07-26 13 views
1

在呼叫當我得到了一個服務器例外:JSON的轉換問題,從JS到谷歌雲服務器端點

var x = '{"name": "Test","address": { "street": "White House"}}'; 
gapi.client.realestate.create(x).execute(function(resp) { 
    console.log(resp); 
}); 

java.lang.ClassCastException: com.google.appengine.repackaged.org.codehaus.jackson.node.TextNode cannot be cast to com.google.appengine.repackaged.org.codehaus.jackson.node.ObjectNode 
    at com.google.api.server.spi.tools.devserver.RpcApiServlet.doSingleBackendCall(RpcApiServlet.java:131) 
    at com.google.api.server.spi.tools.devserver.RpcApiServlet.service(RpcApiServlet.java:112) 

如果我使用API Explorer相同的JSON表達,它的工作原理。該@ApiMethod被定義爲:

@ApiMethod(name = "create", path = "properties", httpMethod = HttpMethod.POST) 
public void create(RealEstateProperty property, User user) throws Exception { 

回答

3

的JS客戶端庫方法指望JSON對象,而不是JSON字符串,它爲調用本身的編碼。此外,由於這是一個POST請求,你將不得不定義POST體作爲resource參數的方法(這是不是真的好可惜記載)

這應該工作:

var x = {"name": "Test","address": { "street": "White House"}}; 
gapi.client.realestate.create({"resource": x}).execute(... 
+0

我不有異常了,但服務器端的'property'對象沒有被填充。該實例已創建,但字段爲空。 – Sydney

+0

@Sydney,看看我的問題[這裏](http://stackoverflow.com/questions/19988725/making-calls-from-the-javascript-client-library-with-named-and-unnamed-paramete) 。 – willlma