我正在使用URL类从中读取InputStream.有什么方法可以使用RestTemplate吗?
InputStream input = new URL(url).openStream();
JsonReader reader = new JsonReader(new InputStreamReader(input, StandardCharsets.UTF_8.displayName()));
如何使用RestTemplate而不是使用URL获取InputStream?
解决方法:
你不应该直接获得InputStream. RestTemplate旨在封装处理响应(和请求)内容.它的优势在于处理所有IO并为您提供随时可用的Java对象.
您需要注册适当的HttpMessageConverter
对象.那些人可以通过HttpInputMessage
对象访问响应的InputStream.
As Abdull suggests,Spring确实为Resource提供了一个HttpMessageConverter实现,它本身包含了一个InputStream,ResourceHttpMessageConverter
.它不支持所有的Resource类型,但是因为你应该编程接口,所以你应该只使用superinterface资源.
当前实现(4.3.5)将返回ByteArrayResource
,其中响应流的内容被复制到您可以访问的新ByteArrayInputStream.
您不必关闭流. RestTemplate会为您完成这项工作. (如果您尝试使用InputStreamResource
,这是ResourceHttpMessageConverter支持的另一种类型,这是很不幸的,因为它包装了底层响应的InputStream,但在它暴露给您的客户端代码之前就已关闭.)