java - Spring Boot - WebClient - 多部分响应 - 如何获取二进制数据
问题描述
这是我调用 REST 服务的代码
String result = webClient.post()
.body(BodyInserters.fromMultipartData(bodyBuilder.build()))
.exchangeToMono(clientResponse -> clientResponse.bodyToMono(String.class))
.block();
这工作正常。我得到一个 HTTP 状态 200。
回复
标题内容类型:多部分/表单数据;边界=“n1OnMVB:z)VeTRs)kd9:h8Hz9H+_kywMV2mb)MWu。”
身体
--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�
问题/问题:我如何接收二进制数据。我需要这样的东西
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());
推荐阅读
- java - 如何在 Java 中正确更改 http 请求的内容类型?
- kubernetes - ARM 上的 Kubelet 无法启动:无法启动 ContainerManager 系统验证失败 - 未安装以下 Cgroup 子系统:[cpuset]
- c# - 如何在 C# 中显示肥皂结果中的只读属性
- javascript - CSS 过渡在 Firefox 上随机“缩放”某些元素
- javascript - 随机报价生成器多个报价
- mmenu - 从语言选项卡返回菜单选项卡时还记得选择的面板吗?
- html - 在 CKAN 的 Jinja2 模板中插入静态 html
- c++ - 如何将 C++ 代码构建到 .so 和 .dll 中
- python - 如何让对象在pygame中以随机模式移动?
- java - 如何在 Java 中对方法列表进行排序?