首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >POST InputStream RestTemplate

POST InputStream RestTemplate
EN

Stack Overflow用户
提问于 2020-09-08 13:27:56
回答 2查看 764关注 0票数 2

我想向服务器发布一个InputStream。我使用Spring,因此使用RestTemplate来执行我的HTTP请求。

客户端

代码语言:javascript
运行
复制
    public void postSomething(InputStream inputStream) {
          String url = "localhost:8080/example/id";
          RestTemplate restTemplate = new RestTemplate();
          restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter());
          restTemplate.postForLocation(url, inputStream, InputStream.class); 
    }

服务器

代码语言:javascript
运行
复制
@PostMapping("/example/{id}")
public void uploadFile(@RequestBody InputStream inputStream, @PathVariable String id) { 
           InputStream inputStream1 = inputStream;
}

在客户端,我得到No HttpMessageConverter for [java.io.ByteArrayInputStream],在服务器端,我得到Cannot construct instance of 'java.io.InputStream' (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-08 13:45:03

ByteArrayHttpMessageConverter代表的是byte[],而不是InputStream,就像类名所说的那样。

没有内置的HttpMessageConverter用于InputStream,但是有一个ResourceHttpMessageConverter,它可以处理例如InputStreamResource

代码语言:javascript
运行
复制
RestTemplate restTemplate = new RestTemplate(Arrays.asList(new ResourceHttpMessageConverter()));
URI location = restTemplate.postForLocation(url, new InputStreamResource(inputStream)); 
票数 1
EN

Stack Overflow用户

发布于 2020-09-08 13:45:53

不能通过HTTP传输流。HTTP是一种无状态协议,它不支持字节传输。你能做的就是

  1. 读取整个输入流并将其输出为字符串或任何其他形式
  2. 使用任何UDP格式的数据传输(SOAP或套接字)

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63794946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档