POST InputStream RestTemplate
POST InputStream RestTemplate
我想 POST 一个 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
ByteArrayHttpMessageConverter
是 byte[]
,而不是 InputStream
,正如 class 的名称所说。
没有built-in HttpMessageConverter
for InputStream
, but there is a ResourceHttpMessageConverter
, which can handle e.g. an InputStreamResource
.
RestTemplate restTemplate = new RestTemplate(Arrays.asList(new ResourceHttpMessageConverter()));
URI location = restTemplate.postForLocation(url, new InputStreamResource(inputStream));
您不能通过 HTTP 传输流。 HTTP 是无状态协议,不支持字节传输。你能做的是
- 读取整个输入流并将其输出为字符串或任何其他形式
- 使用任何 UDP 形式的数据传输(SOAP 或套接字)
我想 POST 一个 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
ByteArrayHttpMessageConverter
是 byte[]
,而不是 InputStream
,正如 class 的名称所说。
没有built-in HttpMessageConverter
for InputStream
, but there is a ResourceHttpMessageConverter
, which can handle e.g. an InputStreamResource
.
RestTemplate restTemplate = new RestTemplate(Arrays.asList(new ResourceHttpMessageConverter()));
URI location = restTemplate.postForLocation(url, new InputStreamResource(inputStream));
您不能通过 HTTP 传输流。 HTTP 是无状态协议,不支持字节传输。你能做的是
- 读取整个输入流并将其输出为字符串或任何其他形式
- 使用任何 UDP 形式的数据传输(SOAP 或套接字)