Spring 启动 - WebClient - 多部分响应 - 如何获取二进制数据
Spring Boot - WebClient - multipart response - How to get the binary data
这是我调用 REST-Service
的代码
String result = webClient.post()
.body(BodyInserters.fromMultipartData(bodyBuilder.build()))
.exchangeToMono(clientResponse -> clientResponse.bodyToMono(String.class))
.block();
这很好用。我得到了 HTTP-Status 200.
回应
Header Content-Type: multipart/form-data; boundary="n1OnMVB:z)VeTRs)kd9:h8Hz9H+_kywMV2mb)MWu."
Body
--n1OnMVB:z)VeTRs)kd9:h8Hz9H+_kywMV2mb)MWu. Content-Disposition: form-data; name="lastname"
smith
--n1OnMVB:z)VeTRs)kd9:h8Hz9H+_kywMV2mb)MWu. Content-Disposition: form-data; name="data"; filename="data.cms" Content-Transfer-Encoding: binary
0� *�H�� ��0�
Problem/Question: 如何接收二进制数据。我需要这样的东西
byte[] result = webClient.post()....... -> clientResponse.bodyToMono(byte[])
甚至更好
MyResultObject result = webClient.post().....-> clientResponse.bodyToMono(MyResultObject.class)
其中MyResultObject有对应的成员。
我试了很多。我搜索了很多。但不幸的是,我没有找到任何帮助我的东西。
终于找到解决办法了。我首先尝试使用 RestTemplate。同样的问题,我找不到访问二进制数据的解决方案。
我找到了一个没有 REST 的可行解决方案。我直接用httpClient
CloseableHttpResponse response = client.execute(httpPost);
InputStream in = new BufferedInputStream(response.getEntity().getContent());
ByteArrayDataSource datasource = new ByteArrayDataSource(in, "multipart/form-data");
MimeMultipart multipartR = new MimeMultipart(datasource);
BodyPart bodyPart = multipartR.getBodyPart(1); //Or you can iterate about the body parts
InputStream is = bodyPart.getInputStream());
这是我调用 REST-Service
的代码 String result = webClient.post()
.body(BodyInserters.fromMultipartData(bodyBuilder.build()))
.exchangeToMono(clientResponse -> clientResponse.bodyToMono(String.class))
.block();
这很好用。我得到了 HTTP-Status 200.
回应
Header Content-Type: multipart/form-data; boundary="n1OnMVB:z)VeTRs)kd9:h8Hz9H+_kywMV2mb)MWu."
Body
--n1OnMVB:z)VeTRs)kd9:h8Hz9H+_kywMV2mb)MWu. Content-Disposition: form-data; name="lastname"
smith
--n1OnMVB:z)VeTRs)kd9:h8Hz9H+_kywMV2mb)MWu. Content-Disposition: form-data; name="data"; filename="data.cms" Content-Transfer-Encoding: binary
0� *�H�� ��0�
Problem/Question: 如何接收二进制数据。我需要这样的东西
byte[] result = webClient.post()....... -> clientResponse.bodyToMono(byte[])
甚至更好
MyResultObject result = webClient.post().....-> clientResponse.bodyToMono(MyResultObject.class)
其中MyResultObject有对应的成员。
我试了很多。我搜索了很多。但不幸的是,我没有找到任何帮助我的东西。
终于找到解决办法了。我首先尝试使用 RestTemplate。同样的问题,我找不到访问二进制数据的解决方案。
我找到了一个没有 REST 的可行解决方案。我直接用httpClient
CloseableHttpResponse response = client.execute(httpPost);
InputStream in = new BufferedInputStream(response.getEntity().getContent());
ByteArrayDataSource datasource = new ByteArrayDataSource(in, "multipart/form-data");
MimeMultipart multipartR = new MimeMultipart(datasource);
BodyPart bodyPart = multipartR.getBodyPart(1); //Or you can iterate about the body parts
InputStream is = bodyPart.getInputStream());