Как вызвать микросервис для извлечения данных в spring webflux

#spring #webclient #spring-webflux

#spring #webclient #spring-webflux

Вопрос:

Я хочу вызвать микросервис из другой службы, используя webclient в spring flux. Но я не могу правильно написать код. Не могли бы вы подсказать, как вызвать другую службу. Пожалуйста, найдите мой код, как показано ниже.

Мне нужно вызвать службу, указанную ниже

 public Mono<ServerResponse> load(ServerRequest res){
    String c1name = res.pathVariable("cust");
    String c2name = res.queryParam("cl").orElse("");
    String oname = res.queryParam("ol").orElse("");
    return res.body()
}
 
 public Mono<ResponseEntity<Void>> ftpFileSend(MultipartFile fileData, String cust, MultiValueMap<String,String) qpar {
    MultiValueMap<String,String> qpar=new LinkedMultiValueMap<String,String>();
       qpar.add("name","spring");
    MultiValueMap<String,Object> body=new LinkedMultiValueMap<String,Object>();
    String url="http://localhost:8088/"  cust "/load";

    try {
        body.add("file", fileData.getBytes());
    } catch (IOException e) {
        return Mono.error(e);   // <-- note how to create an error signal
    }


    return webClient
                .post()
                .uri(uriBuilder -> uriBuilder.path(url).queryParams(qpar).build() )
                .contentType(MediaType.MULTIPART_FORM_DATA)
                .body(BodyInserters.fromMultipartData(body))
                .retrieve()
                .toBodilessEntity();
}
 

Ответ №1:

Хм, было бы здорово, если бы вы предоставили несколько журналов ошибок или около того. В любом случае, если вы хотите создать составное тело, есть конструктор MultipartBodyBuilder (в org.springframework.http.client.MultipartBodyBuilder).

Пример использования выглядит следующим образом,

 MultipartBodyBuilder builder = new MultipartBodyBuilder();
builder.part("file", new MultipartFileResource(fileData));
MultiValueMap<String, HttpEntity<?>> multipartBody = builder.build();
 

Затем используйте это multipartBody в вызове WebClient.

 return webClient
    ...
    .body(BodyInserters.fromMultipartData(multipartBody))
    .retrieve()
    .toBodilessEntity();