My RESTクライアントはRestTemplateを使用してオブジェクトのリストを取得します。
ResponseEntitiy<List> res = restTemplate.postForEntity(getUrl(), myDTO, List.class);
次に、返されたリストを使用して、呼び出し元のクラスにListとして返します。文字列の場合、toStringを使用できますが、リストの回避策は何ですか?
まず、リストの要素のタイプがわかっている場合は、ParameterizedTypeReference
クラスをそのように使用できます。
ResponseEntity<List<MyObj>> res = restTemplate.postForEntity(getUrl(), myDTO, new ParameterizedTypeReference<List<MyObj>>() {});
次に、リストを返すだけの場合は、次のことができます。
return res.getBody();
そして、あなたが気にするのがリストだけなら、あなたはただ行うことができます:
// postForEntity returns a ResponseEntity, postForObject returns the body directly.
return restTemplate.postForObject(getUrl(), myDTO, new ParameterizedTypeReference<List<MyObj>>() {});
受け入れられた答えが機能しませんでした。 postForEntity
にはこのメソッドシグネチャがなくなったようです。代わりにrestTemplate.exchange()
を使用する必要がありました:
ResponseEntity<List<MyObj>> res = restTemplate.exchange(getUrl(), HttpMethod.POST, myDTO, new ParameterizedTypeReference<List<MyObj>>() {});
次に、上記のようにリストを返します。
return res.getBody();
最新バージョン(Spring Framework 5.1.6)では、両方の回答が機能しません。 kaybee99が彼の answerpostForEntity
で言及したように、メソッドシグネチャが変更されました。また、restTemplate.exchange()
メソッドとそのオーバーロードには、RequestEntity<T>
またはその親HttpEntity<T>
オブジェクトが必要です。前述のとおり、DTOオブジェクトを渡すことができません。
これは私のために働いたコードです
List<Shinobi> shinobis = new ArrayList<>();
shinobis.add(new Shinobi(1, "Naruto", "Uzumaki"));
shinobis.add(new Shinobi(2, "Sasuke", "Uchiha");
RequestEntity<List<Shinobi>> request = RequestEntity
.post(new URI(getUrl()))
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.body(shinobis);
ResponseEntity<List<Shinobi>> response = restTemplate.exchange(
getUrl(),
HttpMethod.POST,
request,
new ParameterizedTypeReference<List<Shinobi>>() {}
);
List<Shinobi> result = response.getBody();
それが誰かを助けることを願っています。
ResponseEntityのラップを解除し、オブジェクト(リスト)を取得できます
res.getBody()