java流对象传入restful Web服务并通过resttemplate使用
我有一个控制器类,它公开一个方法并以流的形式返回对象(java 8)
@RequestMapping(value = { "/book/class/{class}"},method = RequestMethod.GET)
@ApiOperation(response = Book.class, responseContainer="List", value = "Get all books of a class")
public Stream<Book> getBooksForAllClass(@PathVariable("class") String class) {
return myService.getBooksForClass().map(book -> Book.createBuilder().withBook();
}
重置服务消费者客户端需要获取流对象并将其存储到列表中。因此
List<Book> books = Lists.newArrayList();
RestTemplate restTemplate = new RestTemplate();
String resourceUri = String.format("%s/%s", serviceUrl, "class_a");
Book[] arrayOfBooks = restTemplate.getForObject(resourceUri, Book[].class);
books.addAll(Arrays.asList(arrayOfBooks));
这似乎不起作用。有没有办法通过resttemplate使用流对象
# 1 楼答案
rest控制器和客户端中的类型不匹配。所以你有
public Stream<Book> getBooksForAllClass
和restTemplate.getForObject(resourceUri, Book[].class);
Stream<Book>
vsBook[]
。如果你想在你的客户机中得到一个图书数组,你必须先把你的流转换成一个数组stream().toArray(Book[]::new)
而且,您可能应该避免流序列化,因为它是一个单一使用的操作链,从来没有打算持久化。如果将终端操作应用于流,则无法再次重用流。在这种情况下,使用
List<Book>
或Book[]
将是更好的选择