2016-10-17 7 views
2

Я хочу, чтобы сделать услугу с весной RestTemplate, в моей стороне службы код выглядит так: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>>() {}); 

и с этим решением сервер не может принимать объект и вызвать исключение, что такое правильный путь?

+0

правильный путь, '@ класса Autowired' RestTemplate и использования, что вместо создания нового объекта каждый раз .. –

+0

я думает, что вы не понимаете мою проблему –

+0

Затем выкладываю StackTrace ... –

ответ

6

Проверьте, подходит ли ваш код ниже. Это должно сработать.

//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>>() {}); 
+0

Это сработало, но в чем разница между PostForObject и обменом, что в PostForObject нам не нужно бросать requestEntity в HttpEntity, но взамен мы должны это сделать. –

+0

Какую точную ошибку вы получите для вызова метода postForObject? Если вы передадите ArrayList «personList», как я опубликовал в своем ответе выше, это должно сработать. Список rateResponse = restTemplate.postForObject (url, personList, List.class); – abaghel

+0

нет ошибки, но когда у пользователя postForObject rateResponse не будет список , и он будет LinkedHashMap. –