【问题标题】:How to consume binary and String Response using WebClient in Spring boot?如何在 Spring Boot 中使用 WebClient 使用二进制和字符串响应?
【发布时间】:2021-12-15 22:45:36
【问题描述】:

我需要使用供应商 API,它在请求成功时以二进制格式返回文件(.pdf/.jpg/.png),而在请求失败时返回 JSON 响应。 Request 方法是 POST 类型的。
我尝试使用以下代码:

  WebClient webClient = WebClient.create();
  ResponseEntity<Object> apiResponse = webClient.post()
                .uri(new URI("https://api.myapp.in/getDocument"))
                .header("mobile", "XXXXXXXXX8")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                //.accept(MediaType.parseMediaType("application/pdf"))
                .body(BodyInserters.fromFormData(map))
                .retrieve()
                .toEntity(Object.class)
                .block();

当我执行上述代码时,它工作正常,我能够获得错误情况下的 JSON 响应,但是当请求成功时,它会给出如下错误:

 Content type 'application/pdf' not supported for bodyType=java.lang.Object

【问题讨论】:

    标签: java spring-boot webclient


    【解决方案1】:

    收到回复后,您可以ResponseEntity.getHeaders()

    您可以从响应标头中获取内容类型并相应地使用您的响应。 如果 API 没有根据响应返回有效的内容类型,您可以在 API 提供者上提出缺陷。

    【讨论】:

    • 感谢您的帮助,但只要执行上述行,它就会引发异常。所以我没有检查标题的选项。为了更清楚,我更新了回复。
    • 有什么异常?您可以使用更多详细信息编辑您的帖子
    • 另外,您是否尝试过先使用 curl 或邮递员,您在响应中得到的内容类型是什么?
    • 异常信息如前所述。我尝试使用邮递员,在响应部分中,它在请求成功时显示二进制格式响应,并在请求失败时按预期显示 Json 响应。
    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 2021-11-15
    • 2017-10-25
    • 2021-11-20
    • 2021-11-16
    • 2019-10-29
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多