流对象在restful webservices中传递并通过resttemplate消耗

时间:2016-11-22 03:32:06

标签: java web-services stream resttemplate

我有一个控制器类,它公开一个方法并将对象作为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来使用流对象?

1 个答案:

答案 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>将是更好的选择。