【问题标题】:No parser defined for Content-Type: application/json没有为 Content-Type: application/json 定义解析器
【发布时间】:2012-09-04 19:26:23
【问题描述】:

我正在使用 google-http-java-client-1.10.3-beta 向外部源提供的服务发出 RESTfull Json 请求。

我需要解析响应中的 Json,以便为我的应用构建一些 POJO。

为此,我使用 HttpResonse 方法“解析为”:

response.parseAs(SomeModel.class)

但我遇到了这个异常:

java.lang.IllegalArgumentException: No parser defined for Content-Type: application/json
    at com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:497)

响应的 json 格式如下: [{"key" : {"key" : "value", "key" : "value"}}]

在处理带方括号的响应时,我已经验证了其他 Json 库的一些问题,这可能是这里的问题吗?

有什么想法吗?

【问题讨论】:

  • 我猜你缺少 JSON 库。 Google-java-client 与 Jackson 和 GSON 一起打包。确保此库在您的路径中。您可以从此 zip 获取它们:code.google.com/p/google-http-java-client/downloads/…
  • 实际上,我使用的是 zip README 中建议的 gson-2.1,但感谢您的回答。

标签: java android google-app-engine google-api


【解决方案1】:

回应我自己,api需要你手动设置一个JsonObjectParser对象到涉及的请求。

JsonObjectParser 可能是 GsonParser 或 JacksonParser 或任何其他实现的解析器。

因此,为了为您的请求设置 GsonParser,您可以使用以下代码:

HttpRequest setJsonParser(HttpRequest request) {
    JsonObjectParser parser = new JsonObjectParser(new GsonFactory());
    return request.setParser(parser);
}

那么你就可以做到:

HttpRequest request = setJsonParser(request).execute().parseAs(SomeModel.class);

您所有的 POJO 都会自动生成。

注意:我已将我的 google-http-java-client 版本升级到 1.11.0-beta,早期版本在调用 setParser 时不会返回 HttpRequest 对象,因此使用时要小心给出的代码,你可能需要一个 void 而不是一个函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2020-11-14
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多