Для меня не было очевидным, что, хотя вы можете принять коллекцию в качестве параметра запроса, но на стороне потребителя вы все равно должны передавать элементы коллекции в виде значений, разделенных запятыми .
Например, если api на стороне сервера выглядит так:
@PostMapping("/post-topics")
public void handleSubscriptions(@RequestParam("topics") Collection<String> topicStrings) {
topicStrings.forEach(topic -> System.out.println(topic));
}
Непосредственная передача коллекции в RestTemplate в виде RequestParam, например ниже, приведет к повреждению данных
public void subscribeToTopics() {
List<String> topics = Arrays.asList("first-topic", "second-topic", "third-topic");
RestTemplate restTemplate = new RestTemplate();
restTemplate.postForEntity(
"http://localhost:8088/post-topics?topics={topics}",
null,
ResponseEntity.class,
topics);
}
Вместо этого вы можете использовать
public void subscribeToTopics() {
List<String> topicStrings = Arrays.asList("first-topic", "second-topic", "third-topic");
String topics = String.join(",",topicStrings);
RestTemplate restTemplate = new RestTemplate();
restTemplate.postForEntity(
"http://localhost:8088/post-topics?topics={topics}",
null,
ResponseEntity.class,
topics);
}
Полный пример можно найти здесь , надеюсь, это спасет кого-то от головной боли:)