Я пытался использовать одну конечную точку REST, чей вывод - файл PDF. Исходная конечная точка корректно возвращает PDF, но когда я использую Spring weblclient для использования, как показано ниже, и преобразования в файл, при открытии выдается ошибка «файл поврежден».
Также пробный ресурс массива байтов ( Как лучше всего получить байтовый массив из ClientResponse из Spring WebClient? ), но я сомневаюсь, что преобразование байтов может вызывать повреждение файла, поэтому используется InputStream но та же проблема, любые указатели, пожалуйста?
Пример кода
InputStream mono = WebClient.create().get().uri(UriComponentsBuilder.fromUriString(serviceUri)).build().toUri())
.accept(MediaType.APPLICATION_PDF)
.exchange()
.flatMap(response -> response.bodyToMono(InputStreamResource.class))
.map(inputStreamResource -> {
try {
return inputStreamResource.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}).block();
try(OutputStream outputStream = new FileOutputStream("c:\\report.pdf")) {
try {
IOUtils.copy(mono, outputStream);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e | IOException e) {
e.printStackTrace();
}