Я должен использовать API-интерфейс API для отдыха (/getconstomerList) из моего java-кода, который возвращает файл PDF. Мне нужно прочитать файл PDF и преобразовать его в строку.
Я пытался сделать это с Тикой
BodyContentHandler handler = new BodyContentHandler(10 * 1024 * 1024);
Metadata metadata = new Metadata();
URL url = new URL("http://" + hostName + uri);
BufferedInputStream inputstream = new BufferedInputStream(url.openStream());
Parser parser = new AutoDetectParser();
parser.parse(inputstream, handler, metadata, pcontext);
return handler.toString();
Но этот код продолжает возвращать мне пустой ответ, я не уверен, что не так или есть ли другой способ сделать это. Пожалуйста помоги.
Да, код работает с локальным pdf, я протестировал его с тем же, что и с остальным ответом. Я новичок в обработке файла как ответа остального, могу сначала попробовать сохранить его локально.




Для HTTP-вызовов я бы рекомендовал библиотеку Модернизация. Вы можете легко установить/настроить, предоставив interface содержащий методы API. Один из этих методов вернет Call<ResponseBody>, из которого вы получите ResponseBody, и с его помощью вы сможете получить InputStream. Используя его, вы можете конвертировать поток в файл и делать с ним то, что хотите. Ниже приведен пример кода.
String downloadFileAndReadAsString(ResponseBody responseBody, Path filePath) {
try (InputStream inputStream = responseBody.byteStream()) {
Path downloadedFilePath = Files.copy(inputStream, filePath,
StandardCopyOption.REPLACE_EXISTING);
return new String(Files.readAllBytes(downloadedFilePath));
} catch (IOException ex) {
ex.printStackTrace();
}
}
Надеюсь, поможет.
Работает ли код, если вы вынете загружаемую часть и загрузите в нее тот же PDF-файл из локального файла? Могут быть перенаправления и тому подобное, лучше сначала загрузить PDF-файл в память (или временный файл), прежде чем передавать его Тике.