java – 使用RestTemplate获取InputStream

我正在使用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,但在它暴露给您的客户端代码之前就已关闭.)

上一篇:java – 从JAR中的资源文件夹加载属性


下一篇:java – 如何使用InputStream从ZIP读取文件?