我正在使用 URL 类从中读取 InputStream。有什么办法可以为此使用 RestTemplate 吗?
InputStream input = new URL(url).openStream();
JsonReader reader = new JsonReader(new InputStreamReader(input, StandardCharsets.UTF_8.displayName()));
我怎样才能得到 InputStream
与 RestTemplate
而不是使用 URL
?
原文由 user1950349 发布,翻译遵循 CC BY-SA 4.0 许可协议
您不应该直接获取
InputStream
。RestTemplate
用于封装处理响应(和请求)内容。它的优势在于处理所有 IO 并为您提供一个随时可用的 Java 对象。其中一位
RestTemplate
的原作者 Brian Clozel 指出:您需要注册适当的
HttpMessageConverter
对象。这些将可以通过HttpInputMessage
对象访问响应的InputStream
。As Abdull suggests , Spring does come with an
HttpMessageConverter
implementation forResource
which itself wraps anInputStream
,ResourceHttpMessageConverter
.它不支持所有Resource
类型,但由于无论如何你都应该对接口进行编程,你应该只使用超级接口Resource
。当前的实现 (4.3.5) 将返回一个
ByteArrayResource
并将响应流的内容复制到一个新的ByteArrayInputStream
您可以访问它。您不必关闭流。
RestTemplate
会为您处理。 (不幸的是,如果您尝试使用InputStreamResource
,另一种由ResourceHttpMessageConverter
支持的类型,因为它包装了底层响应的InputStream
暴露给您的客户端代码。)