#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, как и ожидалось, при сбое запроса.