【问题标题】:Spring Boot - WebClient - multipart response - How to get the binary dataSpring Boot - WebClient - 多部分响应 - 如何获取二进制数据
【发布时间】:2021-01-26 06:46:26
【问题描述】:

这是我调用 REST 服务的代码

 String result = webClient.post()
                .body(BodyInserters.fromMultipartData(bodyBuilder.build()))
                .exchangeToMono(clientResponse -> clientResponse.bodyToMono(String.class))
                .block();

这很好用。我得到一个 HTTP 状态 200。

回应

Header Content-Type: multipart/form-data;边界="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 有对应的成员。

我尝试了很多。我搜索了很多。但不幸的是,我没有发现任何对我有帮助的东西。

【问题讨论】:

    标签: java spring spring-boot multipartform-data spring-webclient


    【解决方案1】:

    终于找到了解决办法。我第一次尝试使用 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());
    

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 1970-01-01
      • 2020-10-30
      • 2021-09-19
      • 2019-04-15
      • 2021-11-15
      • 1970-01-01
      • 2013-09-27
      • 1970-01-01
      相关资源
      最近更新 更多