2

私の REST サービスは、次のデータで応答します。

[
    {
        "name": "Bart",
        "age": 10
    },
    {
        "name": "Homer",
        "age": 42
    },
    {
        "name": "Marjorie",
        "age": 34
    }
]

結果セットは、Google の HTTP クライアント ライブラリで自動的に解析したいオブジェクトの配列です。したがって、私はSimpsonResultandSimpsonクラスを作成しました:

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;
  }

}

シンプソン.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()機能します。

それで、私のマッピング宣言が間違っていると思いますか?

4

3 に答える 3

3

あなたのやり方は有効ではありません。SimpsonResult には simpsons という名前のフィールドが必要ですが、json にはそのようなフィールドはありません。

ほとんどのフレームワークでジェネリック コレクション型を使用するのは少し難しいので、私が一般的に行うことは、Simpson クラス内に単純なリスト型を作成することです。

public class Simpson {

  public static class List extends ArrayList<Simpson> {
  }

  ... //you simpson code
}

Simpson.Listその後、注釈を介して json を解析するために使用できます。

于 2014-11-01T12:29:13.600 に答える
0

これを試して..

@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);
}
于 2015-11-02T18:07:11.317 に答える