web-dev-qa-db-ja.com

SpringRestTemplate送信リスト取得リスト

SpringのRestTemplateを使用してサービスを作成したいのですが、サービス側のコードは次のようになります。

@PostMapping(path="/savePersonList")
@ResponseBody
public List<Person> generatePersonList(@RequestBody List<Person> person){
    return iPersonRestService.generatePersonList(person);
}

クライアント側で、このコードを使用してサービスを呼び出すと、次のようになります。

List<Person> p = (List<Person>) restTemplate.postForObject(url, PersonList, List.class);

pオブジェクトをList<Person>として使用することはできません。LinkedHashListになります。いくつかの調査の後、交換方法でサービスを呼び出す必要があるという解決策を見つけました。

ResponseEntity<List<Person>> rateResponse = restTemplate.exchange(url, HttpMethod.POST, personListResult, new ParameterizedTypeReference<List<Person>>() {});

このソリューションでは、サーバーはオブジェクトを取得して例外を発生させることができません。正しい方法は何ですか?

3

コードが以下のようになっているかどうかを確認してください。これはうまくいくはずです。

//header
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//person list
List<Person> personList = new ArrayList<Person>();
Person person = new Person();
person.setName("UserOne");  
personList.add(person);
//httpEnitity       
HttpEntity<Object> requestEntity = new HttpEntity<Object>(personList,headers);
ResponseEntity<List<Person>> rateResponse = restTemplate.exchange(url, HttpMethod.POST, requestEntity,new ParameterizedTypeReference<List<Person>>() {});
11
abaghel

それはあなたに役立つかもしれません。

  List<Integer> officialIds = null;
  //add values to officialIds 
  RestTemplate restTemplate = new RestTemplate();

  HttpHeaders headers = new HttpHeaders();

  HttpEntity<List<Integer>> request = new HttpEntity<List<Integer>>(officialIds, 
    headers);

  ResponseEntity<YourResponseClass[]> responses = 
  restTemplate.postForEntity("your URL", request , YourResponseClass[].class );

  List<YourResponseClass> list = Arrays.asList(responses.getBody());
0
Sourav Ghadai