5

Spring を使用RestTemplateして、REST Web サービスに対して呼び出しを行っています。これらの呼び出しの 1 つは、特定のタイプのオブジェクトのリストを返すことです。RestTemplateメソッドでは、予想される戻り値の型を示すためにクラス引数を指定する必要があります。

// restTemplate is type org.springframework.web.client.RestTemplate
URI restServiceURI = new URI("http://example.com/foo")
restTemplate.getForObject(restServiceURI, List<Foo>.class);

明らかに、これはコンパイルされません。.classそのような型引数を指定すると、静的プロパティを取得できません。型引数を削除するとコードはコンパイルされますが、rawtypesコンパイラの警告が生成されます。

私の質問は簡単です。コンパイラの警告を抑制することに固執していますか、それともこれをコーディングするためのよりクリーンな方法はありますか?

4

1 に答える 1

3

しかし、RestTemplateは、リスト要素をクラスのインスタンスに変換することをどのように知るのでしょうFooか。コードを実行してみましたが、期待どおりに機能しますか?

これを回避することを考える1つの方法は、入力型として配列を使用することです。例えば。

restTemplate.getForObject(restServiceURI, Foo[].class);

しかし、それがサポートされているかどうかはわかりません。より複雑なデータ型を本当に逆シリアル化する必要がある場合は、JacksonまたはGsonの使用を検討する必要があります。

Jacksonを使用すると、ObjectMapperクラスを使用して、ほとんどのソースからデータを簡単に逆シリアル化できます。

String input = ...;
ObjectMapper mapper = new ObjectMapper();
List<Foo> list = mapper.readValue(input, new TypeReference<List<Foo>>(){});

上記は、TypeReferenceを拡張する匿名クラスを意図的に作成するために機能します。クラスは実行時にそのジェネリック型を記憶し、オブジェクトマッパーがFooのリストを作成するのに役立ちます。より完全な説明については

于 2011-12-14T18:28:12.707 に答える