Как использовать двоичный и строковый ответ с помощью WebClient в весенней загрузке?

#java #spring-boot #webclient

Вопрос:

Мне нужно использовать API поставщика, который возвращает файл(.pdf/.jpg/.png) в двоичном формате при успешном выполнении запроса и возвращает ответ JSON при сбое запроса. Метод запроса имеет тип POST.
Я попытался использовать приведенный ниже код:

 WebClient webClient = WebClient.create();  ResponseEntitylt;Objectgt; 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  

Ответ №1:

Как только вы получите ответ, вы сможете ResponseEntity.getHeaders() .

Из заголовков ответов вы можете получить тип контента и соответственно использовать свой ответ. Если API не возвращает допустимый тип содержимого на основе ответа, вы можете вызвать дефект у поставщика API.

Комментарии:

1. Спасибо за вашу помощь, но он выдает исключение, как только выполняется приведенная выше строка. Поэтому у меня нет возможности проверить заголовки. я обновил ответ для большей ясности.

2. Что является исключением? вы можете отредактировать свой пост с более подробной информацией

3. Кроме того, вы пробовали сначала использовать curl или postman, какой тип контента вы получаете в обоих ответах?

4. Сообщение об исключении, как уже упоминалось выше. Я пробовал использовать почтальона, где в разделе «Ответ» он показывает ответ в двоичном формате при успешном выполнении запроса и отображает ответ Json, как и ожидалось, при сбое запроса.