Как HTTP POST Flux <String>как массив JSON с помощью SpringClient WebClient? - PullRequest
0 голосов
/ 14 января 2019

Как мне использовать реактив WebClient Spring для POST Flux<String> в качестве массива JSON?

Flux<String> stringFlux = Flux.fromIterable(objects).map(MyObject::getSomeString);

WebClient.create(baseUrl)
  .post()
  .uri(myUrl)
  .contentType(MediaType.APPLICATION_JSON)
  .body(stringFlux, String.class)
  .exchange()
  .flatMap(response -> {
     if (response.statusCode().is2xxSuccessful()) {
       // Do something
     }
     return response.bodyToMono(Void.class);
   })
   .block();

Это отправляет запрос, но не отправляет его как массив строк JSON.

Я увидел, что есть другая body() подпись, которая принимает ParameterizedTypeReference, поэтому я попробовал это:

.body(stringFlux.collectList(), new ParameterizedTypeReference<>() {})

но на самом деле это приводит к ошибке компиляции (я на Java 11):

Error:java: com.sun.tools.javac.code.Types$FunctionDescriptorLookupError.

Есть идеи?

1 Ответ

0 голосов
/ 14 января 2019

Ну, я буду проклят. Я получил это с помощью ParameterizedTypeReference. Как обычно бывает, ошибка компиляции подводит итог. Я пропустил параметр типа при объявлении new ParameterizedTypeReference<>() {}. Предоставление типа помогло и опубликовало мой Flux<String> в виде массива JSON:

.body(stringFlux.collectList(), new ParameterizedTypeReference<List<String>>() {})

IntelliJ говорил мне, что этот тип был выведен, но, очевидно, это не так.

...