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

时间:2012-09-04 19:26:24

标签: 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具有以下格式: [{“key”:{“key”:“value”,“key”:“value”}}]

在使用方括号处理响应时,我遇到了其他Json库的一些问题,这可能是问题吗?

有什么想法吗?

1 个答案:

答案 0 :(得分: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而不是一个函数。