我有一个控制器类,它公开一个方法并将对象作为Stream(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();
}
重置服务使用者客户端我需要获取Stream对象并将其存储到列表中。因此,
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来使用流对象?
答案 0 :(得分:0)
您的其他控制器和客户端之间的类型不匹配。所以你有{ Object.keys(subjects).map((item, i) => (
<li className="travelcompany-input clearfix" key={i}>
<span className="input-label">{ subjects[item].name }</span>
<div className="input-group">
{ subjects[item].id in subjectQuantities ?
<input className="form-control form-travelcompany-input" type="text" value={subjectQuantities[item]} min="0" max="10" />
: <p>TEST</p>
}
</div>
</li>
))}
和public Stream<Book> getBooksForAllClass
; restTemplate.getForObject(resourceUri, Book[].class);
vs Stream<Book>
。如果要在客户端中获取一系列书籍,则必须先将流转换为数组。 Book[]
。
你可能应该避免流序列化,因为它是一个单一用途的操作链,从不意味着持久化。如果您将终端操作应用于您的流,您将无法再次重用该流。在这种情况下,使用stream().toArray(Book[]::new)
或List<Book>
将是更好的选择。