java - 没有为 Content-Type : application/json 定义解析器

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

我正在使用 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 格式如下: [{“键”:{“键”:“值”,“键”:“值”}}]

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

有什么想法吗?

最佳答案

回应我自己,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 而不是函数。

关于java - 没有为 Content-Type : application/json 定义解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12270066/

相关文章:

android - 如何阻止 Waze 在 Android 中播放声音警报,quickfix

java - 如何过滤数据存储属性是否存在于列表中

java - hive 模拟 : A counter of a type of bee returns unusually high numbers

java - HtmlUnit 关闭页面错误跟踪

java - ChooserActivity 泄露了 IntentReceiver

java - 如何分析 Google App Engine Java Servlet

c# - 如何在 Google Cloud 中使用 .Net Core 3.0 镜像?

java - 在窗口中显示图像时出现问题

java - 如何向 VSCode Java 调试器提供启动选项参数

java - 覆盖错误android studio