2013-04-08 33 views
2

鑑於API端點JsonMappingException:找到了類型

@ApiMethod(name = "sendChallenge", httpMethod = HttpMethod.POST) 
public ExchangeList sendChallenge(ChallengeData request) throws Exception { 
    return getFromDBThenProcess(request); 
} 

和前端(安卓)沒有合適的構造函數中調用到端點

ExchangeList transfers = service.sendChallenge(request).execute(); 

我從logcat的以下堆棧跟蹤。

注:我在我的監視服務器控制檯(本地主機),並沒有電話進來

堆棧跟蹤:

04-08 14:58:53.261: D/dalvikvm(940): GC_CONCURRENT freed 1394K, 15% free 12495K/14599K, paused 15ms+15ms, total 75ms 
… //[many of those `freed` lines] 
04-08 14:58:54.742: D/dalvikvm(940): GC_CONCURRENT freed 1394K, 15% free 12506K/14599K, paused 15ms+16ms, total 85ms 
04-08 14:58:55.562: W/System.err(940): com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request 
04-08 14:58:55.562: W/System.err(940): { 
04-08 14:58:55.562: W/System.err(940): "code": 0, 
04-08 14:58:55.562: W/System.err(940): "message": "com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.myapi.games.message.ChallengeData]: can not instantiate from JSON object (need to add/enable type information?)\n at [Source: N/A; line: -1, column: -1]" 
04-08 14:58:55.572: W/System.err(940): } 
04-08 14:58:55.572: W/System.err(940): at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:111) 
04-08 14:58:55.572: W/System.err(940): at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:38) 
04-08 14:58:55.572: W/System.err(940): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:314) 
04-08 14:58:55.572: W/System.err(940): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1060) 
04-08 14:58:55.572: W/System.err(940): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:412) 
04-08 14:58:55.572: W/System.err(940): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:345) 
04-08 14:58:55.572: W/System.err(940): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:463) 
04-08 14:58:55.572: W/System.err(940): at com.myapi.games.utils.sendChallenge.doInBackground(sendChallenge.java:70) 
04-08 14:58:55.582: W/System.err(940): at com.myapi.games.utils.sendChallenge.doInBackground(sendChallenge.java:1) 
04-08 14:58:55.582: W/System.err(940): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
04-08 14:58:55.582: W/System.err(940): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
04-08 14:58:55.582: W/System.err(940): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
04-08 14:58:55.582: W/System.err(940): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
04-08 14:58:55.592: W/System.err(940): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
04-08 14:58:55.592: W/System.err(940): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
04-08 14:58:55.592: W/System.err(940): at java.lang.Thread.run(Thread.java:856) 

這是關於連接的Android項目的AppEngine上。編譯沒有錯誤,等等。另外,POJO ChallengeData由其他三個的POJO類似於:

public class ChallengeData{ 

    Credit credit; 
    Coin coin; 
    Friend friend; 

    //getters and setters 
} 

然後信貸和硬幣只包含簡單的字段(如int和string),但朋友包含一些簡單的字段和進一步POJO。

我真的不認爲JSON的深度(即POJO關係)應該重要。但我包括所有相同的細節。

回答

2

您可能會收到此錯誤,因爲您是通過端點API發送圖像,而您忘記將其編碼爲Base64。您必須將所有圖像編碼爲base64字符串。這裏有一個link帶有代碼片段顯示瞭如何做到這一點。記住你從字節編碼到String。我之所以這麼猜,是因爲你提到你的服務器沒有受到任何打擊,但你卻遇到了一個400 Bad Request錯誤,這意味着谷歌正在攔截你的電話並且無法解析請求。所以試試吧。