spring POST输入流剩余模板

j8yoct9x  于 2022-11-21  发布在  Spring
关注(0)|答案(2)|浏览(116)

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

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); 
    }

伺服器

@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

wqsoz72f

wqsoz72f1#

ByteArrayHttpMessageConverter用于byte[],而不是InputStream,正如类的名称所示。
InputStream没有内置的HttpMessageConverter,但是有一个ResourceHttpMessageConverter,它可以处理例如InputStreamResource

RestTemplate restTemplate = new RestTemplate(Arrays.asList(new ResourceHttpMessageConverter()));
URI location = restTemplate.postForLocation(url, new InputStreamResource(inputStream));
yruzcnhs

yruzcnhs2#

你不能通过HTTP传输流。HTTP是一个无状态协议,它不支持字节传输。你可以做的是
1.读取整个输入流并将其输出为字符串或任何其他形式
1.使用任何UDP形式的数据传输(SOAP或套接字)

相关问题