2012-09-04 67 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而不是一個函數。