android - JsonMappingException : No suitable constructor found for type

标签 android google-cloud-endpoints google-eclipse-plugin

给定 api 端点

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

以及前端(android)对端点的调用

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

我从 LogCat 获得以下堆栈跟踪。

注意:我正在监控我的服务器控制台 (localhost),但没有电话进来。

堆栈跟踪:

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 项目。一切都编译无误,等等。此外,POJO ChallengeData 由其他三个 POJO 组成,类似于:

public class ChallengeData{

  Credit credit;
  Coin  coin;
  Friend friend;

  //getters and setters
}

然后 Credit 和 Coin 都只包含简单字段(即 int 和 String),但 Friend 包含一些简单字段和进一步的 POJO。

我真的不认为 JSON 的深度(即 POJO 关系)应该重要。但我仍然包含了所有细节。

最佳答案

您可能会收到此错误,因为您正在通过端点 api 发送图像并且您忘记使用 Base64 对它们进行编码。您必须将所有图像编码为 base64 字符串。这是一个 link代码 fragment 展示了如何做到这一点。请记住,您正在将字节编码为 String。我猜的原因是因为你提到你的服务器没有受到任何打击,但你却收到 400 Bad Request 错误,这意味着谷歌正在拦截你的电话并且无法解析请求。所以试试吧。

关于android - JsonMappingException : No suitable constructor found for type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890140/

相关文章:

android - 应用程序可能在其主线程上做了太多工作 (Android)

java - E/错误 JSONException : No value for categories in android

spring-boot - 例如,是否有第三方服务可以进行 api key 管理而不要求用户在 GCP 上创建帐户?

kubernetes - 云端点、Kubernetes 和 SSL

google-app-engine - Maven + App Engine + Google Eclipse 插件

java - 如何使用 Google App Engine 插件从 WAR 中排除单元测试?

android - 将 admob 广告放在 webview 的底部

android - 在 parse.com 中动态创建文件数据类型的列 android

javascript - Youtube 数据 API 和谷歌云端点

java - 谷歌Eclipse插件: App Engine ORM Enhancement?