![](/img/trans.png)
[英]Using proxies with Google HTTP Client Library for Java
[英]Parse anonymous array from JSON result with Google HTTP Client Library
我的REST服務響應以下數據:
[
{
"name": "Bart",
"age": 10
},
{
"name": "Homer",
"age": 42
},
{
"name": "Marjorie",
"age": 34
}
]
結果集是一組對象,我想使用Google的HTTP客戶端庫自動對其進行解析。 因此,我創建了一個SimpsonResult
和Simpson
類:
SimpsonResult.java
public class SimpsonResult {
private List<Simpson> simpsons;
public SimpsonResult() {
}
public List<Simpson> getSimpsons() {
return simpsons;
}
public void setSimpsons(List<Simpson> simpsons) {
this.simpsons = simpsons;
}
}
Simpson.java
public class Simpson {
@Key
private String name;
@Key
private int age;
public Simpson() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
現在,我想查詢我的后端並將響應自動映射到SimpsonResult
。 因此,我編寫了以下代碼:
@Override
public SimpsonResult loadDataFromNetwork() throws IOException {
HttpRequestFactory requestFactory = getHttpRequestFactory();
GenericUrl url = new GenericUrl(baseUrl);
HttpRequest request = requestFactory.buildGetRequest(url);
request.setParser(new JacksonFactory().createJsonObjectParser());
return request.execute().parseAs(SimpsonResult.class);
}
但是,當我執行代碼時,我從com.google.api.client.json.JsonParser
得到一個解析器異常。
當我將其映射到字符串( request.execute().parseAsString()
)時,它可以工作。
所以我認為我的映射聲明是錯誤的?
您這樣做的方法無效。 SimpsonResult需要一個名為simpsons的字段,並且json中沒有此類字段。
由於在大多數框架中使用通用集合類型有些棘手,因此我通常要做的是在Simpson類內部創建一個簡單的列表類型:
public class Simpson {
public static class List extends ArrayList<Simpson> {
}
... //you simpson code
}
然后,您可以使用Simpson.List
通過注釋解析json。
您可以使用Type來解析參數化的類,如下所示
Type type = new TypeToken<ArrayList<SimpsonResult>>() {}.getType();
request.execute().parseAs(type);
不建議創建一個額外的類,擴展諸如ArrayList之類的參數化類,僅用於解析。 因此,您的函數可以寫成
@Override
public ArrayList<SimpsonResult> loadDataFromNetwork() throws IOException {
HttpRequestFactory requestFactory = getHttpRequestFactory();
GenericUrl url = new GenericUrl(baseUrl);
HttpRequest request = requestFactory.buildGetRequest(url);
Type type = new TypeToken<ArrayList<SimpsonResult>>() {}.getType();
return request.execute().parseAs(type);
}
嘗試這個..
@Override
public Simpson[] loadDataFromNetwork() throws IOException {
HttpRequestFactory requestFactory = getHttpRequestFactory();
GenericUrl url = new GenericUrl(baseUrl);
HttpRequest request = requestFactory.buildGetRequest(url);
request.setParser(new JacksonFactory().createJsonObjectParser());
return request.execute().parseAs(Simpson[].class);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.