2012-09-04 35 views
0

我正在使用google-http-java-client-1.10.3-beta将RESTfull Json请求发送到由外部源提供的服务。没有为内容类型定义解析器:application/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库解决了一些问题,这可能是她的问题è?

任何想法?

+0

我的猜测是你缺少JSON库。 Google-java-client与Jackson和GSON一起打包。确保这个库在你的路径中。您可以从此zip中获取它们:http://code.google.com/p/google-http-java-client/downloads/detail?name=google-http-java-client-1.11.0-beta.zip&can= 2&q = –

+0

实际上,我使用zip中自述文件中建议的gson-2.1,但感谢您的回答。 –

回答

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会自动产生。

注:我已经升级了我的谷歌-HTTP-Java的客户端版本1.11.0-β,称使用呈现代码时setParser所以要小心,当一个早期版本将不会返回一个HttpRequest对象,你可能需要一个void而不是一个函数。