Я хочу использовать WebClient для доступа к какому-либо ограниченному ресурсу, поэтому для его входа необходимо указать логин и пароль и закодировать их в виде данных формы. Работает просто отлично вот так
private Mono<MyDataType> getMyDataType() {
return WebClient.builder().build().post()
.uri(MY_URI)
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.body(BodyInserters.fromFormData(getFormData()))
.exchange()
.flatMap(clientResponse -> clientResponse.bodyToMono(MyDataType.class));
}
private MultiValueMap<String, String> getFormData() {
MultiValueMap<String, String> credentials = new LinkedMultiValueMap<>();
credentials.add("login", readLoginStringFromDiskAsString);
credentials.add("password", readPasswordStringFromDiskAsString);
}
Однако мои read*
функции, как вы можете видеть, блокируют - просто Files.readAllBytes
, как вы это сделали бы в любом другом приложении.
Я хотел бы перевести это чтение с диска на что-то более асинхронное, например использовать DataBufferUtils или что-то подобное. Проблема в том, что Spring предоставляет только одну реализацию fromFormData
- fromFormData(MultiValueMap<String, String> formData)
.
Есть ли способ добиться этого?