Java конвертирует PDF-файл, возвращенный как ответ Rest API на текст

Я должен использовать 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-файл из локального файла? Могут быть перенаправления и тому подобное, лучше сначала загрузить PDF-файл в память (или временный файл), прежде чем передавать его Тике.

Thilo 22.02.2019 07:28

Да, код работает с локальным pdf, я протестировал его с тем же, что и с остальным ответом. Я новичок в обработке файла как ответа остального, могу сначала попробовать сохранить его локально.

Lucie 22.02.2019 07:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
1 263
1

Ответы 1

Для 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();
    }
}

Надеюсь, поможет.

Другие вопросы по теме