首页 > 解决方案 > 如何在 Spring Boot 中使用 WebClient 使用二进制和字符串响应?

问题描述

我需要使用供应商 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

标签: javaspring-bootwebclient

解决方案


一旦你得到回应,你就可以ResponseEntity.getHeaders()

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


推荐阅读