当前位置: 首页 > 面试题库 >

使用RestTemplate获取InputStream

糜淇
2023-03-14
问题内容

我正在使用URL类从中读取InputStream。有什么我可以使用RestTemplate的方法吗?

InputStream input = new URL(url).openStream();
JsonReader reader = new JsonReader(new InputStreamReader(input, StandardCharsets.UTF_8.displayName()));

我怎样才能InputStreamRestTemplate,而不是使用URL


问题答案:

您不应该InputStream直接获得。RestTemplate旨在封装处理响应(和请求)内容。它的优势在于处理所有IO,并为您提供现成的Java对象。

的一位RestTemplate原始作者Brian Clozel 表示:

RestTemplate并不意味着流响应主体;它的合同不允许这样做,而且已经存在了很长时间,以至于在不中断许多应用程序的情况下就无法更改其行为的这一基本部分。

您需要注册适当的HttpMessageConverter对象。这些对象将可以InputStream通过HttpInputMessage对象访问响应的。

作为Abdull表明,Spring并配备了HttpMessageConverter用于实现Resource其自身的包装InputStreamResourceHttpMessageConverter。它不支持所有Resource类型,但是由于无论如何都应该对接口进行编程,因此应该只使用superinterface
Resource

当前的实现(4.3.5)将返回ByteArrayResource,并将响应流的内容复制到ByteArrayInputStream可以访问的新内容。

您不必关闭流。在RestTemplate你需要照顾那个。(这很不幸,如果您尝试使用InputStreamResource,则支持的另一种类型ResourceHttpMessageConverter,因为它包装了底层的响应,InputStream但是在可以公开给客户代码之前已被关闭。)



 类似资料:
  • 我使用URL类从中读取InputStream。有什么方法可以使用RestTemplate实现这一点吗? 如何使用RestTemplate而不是使用URL来获取InputStream?

  • 那么,为什么它要尝试将响应解析为JSON呢?我该如何解决呢? 谢谢!!

  • 我有两个问题: 如何使用spring RestTemplate映射JSON对象列表。 如何映射嵌套的JSON对象。 我正在尝试使用https://bitpay.com/api/rates,方法是按照http://spring.io/guides/gs/consource-rest/的教程学习。

  • 我用的是swapi。在Spring Boot中获取应用程序数据的dev API。我需要用一个行星的名字来获取它的信息。因此,我使用下一个url:https://swapi.dev/api/planets/?search=Tatooine.JSON结果如下所示: 现在,在Java中,我使用服务中的下一个代码: 我只需要得到结果的数组,但是,我如何从对象得到结果的数组?

  • 我试图向Api Rest发出get请求,但我总是得到404,尽管如此,如果尝试在浏览器或邮递员中复制queryUrl,它会非常工作。 我也试过这个: 但什么都没变。有人能帮我吗?

  • 问题内容: 我有两个问题: 如何使用Spring RestTemplate映射JSON对象列表。 如何映射嵌套的JSON对象。 问题答案: 也许这样 控制器代码 RequestMapping 是对扩展名的添加状态代码。使用以及方法。在此类中,由和返回。