я не могу сделать правильное использование веб-службы pdf rest с помощью webClient (webflux)
вот мое создание webClient:
ExchangeStrategies pdfExchangeStrategy = ExchangeStrategies
.builder()
.codecs(
clientCodecConfigurer -> {
CustomCodecs customCodecs = clientCodecConfigurer.customCodecs();
final ByteArrayDecoder byteArrayDecoder = new ByteArrayDecoder(){
@Override
public List<MimeType> getDecodableMimeTypes() {
return Collections.singletonList(APPLICATION_PDF);
}
};
customCodecs.decoder(byteArrayDecoder);
customCodecs.encoder(new ByteArrayEncoder());
DecoderHttpMessageReader pdfReader = new DecoderHttpMessageReader(byteArrayDecoder);
customCodecs.reader(pdfReader);
}
)
.build();
this.webClient = webClientFactory
.newBuilder(logger, "My web client")
.exchangeStrategies(pdfExchangeStrategy)
.defaultHeader(ACCEPT, APPLICATION_PDF_VALUE)
.defaultHeader(CONTENT_TYPE, APPLICATION_PDF_VALUE)
.baseUrl(this.baseUrl)
.build();
и вот мой звонок:
webClient.get()
.uri("http://localhost:8084/my-app/document/{id}", id)
.accept(APPLICATION_PDF)
.retrieve()
.bodyToMono(Byte[].class)
.block();
я получаю эту ошибку:
org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'application/pdf' not supported
, хотя в supportMediaTypes у меня есть application / pdf
использованный веб-сервис:
@GetMapping(value = "/document/{id}", produces = APPLICATION_PDF_VALUE)
public ResponseEntity<byte[]> getDocument(@PathVariable String id) throws IOException {
LOGGER.info("get document with id = {}", id);
byte[] pdf = getInvoicePdf("document/sample.pdf");
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("filename", id + ".pdf");
headers.setContentType(APPLICATION_PDF);
headers.setContentLength(pdf.length);
return ResponseEntity
.ok()
.headers(headers)
.body(pdf);
}
спасибо за вашу помощь