【问题标题】:Stream object passed in restful webservices and consumed via resttemplate流对象传入 RESTful Web 服务并通过 resttemplate 使用
【发布时间】:2016-11-22 03:32:06
【问题描述】:

我有一个控制器类,它公开一个方法并以 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 消费流对象吗?

【问题讨论】:

  • 看看javax.ws.rs.container.AsyncResponse

标签: java web-services stream resttemplate


【解决方案1】:

您的 REST 控制器和客户端中的类型不匹配。所以你有public Stream&lt;Book&gt; getBooksForAllClassrestTemplate.getForObject(resourceUri, Book[].class);Stream&lt;Book&gt;Book[]。如果您想在客户端中获取一系列书籍,则必须首先将您的流转换为数组。 stream().toArray(Book[]::new)

您可能应该避免流序列化,因为它是一次性的操作链,绝不意味着持久化。如果您将终端操作应用于您的流,您将无法再次重用该流。在这种情况下,使用List&lt;Book&gt;Book[] 将是更好的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 2018-05-20
    • 2018-03-31
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多