如何使用 Spring 的 WebClient HTTP POST Flux<String> 作为 JSON 数组?
How to HTTP POST a Flux<String> as a JSON array using Spring's WebClient?
如何使用 Spring 的反应式 WebClient
到 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
.
有什么想法吗?
好吧,我会被诅咒的。我使用 ParameterizedTypeReference
让它工作。通常情况下,编译错误总结了它。我在声明 new ParameterizedTypeReference<>() {}
时省略了类型参数。提供类型就可以了,并将我的 Flux<String>
作为 JSON 数组发布:
.body(stringFlux.collectList(), new ParameterizedTypeReference<List<String>>() {})
IntelliJ 告诉我这种类型是推断出来的,但显然不是。
你可以在没有 ParametrizedTypeRefrence
的情况下使用 List.class
就足够了。
.body(stringFlux.collectList(), List.class)
投票的解决方案似乎没有产生上述结果。这似乎流式传输 JSON 对象列表(这是 Webclient 的目的)而不是发送 JSON 数组结构。
我用该技术得到的结果是:
{}{}{}{}
A JSON 数组输出为:
[{}, {}, {}, {}]
除非我遗漏了什么。
.body(BodyInserters.fromFormData(stringFlux))
不确定这是否是正确答案。
发送 List<> as body
对我有用
如何使用 Spring 的反应式 WebClient
到 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
.
有什么想法吗?
好吧,我会被诅咒的。我使用 ParameterizedTypeReference
让它工作。通常情况下,编译错误总结了它。我在声明 new ParameterizedTypeReference<>() {}
时省略了类型参数。提供类型就可以了,并将我的 Flux<String>
作为 JSON 数组发布:
.body(stringFlux.collectList(), new ParameterizedTypeReference<List<String>>() {})
IntelliJ 告诉我这种类型是推断出来的,但显然不是。
你可以在没有 ParametrizedTypeRefrence
的情况下使用 List.class
就足够了。
.body(stringFlux.collectList(), List.class)
投票的解决方案似乎没有产生上述结果。这似乎流式传输 JSON 对象列表(这是 Webclient 的目的)而不是发送 JSON 数组结构。 我用该技术得到的结果是:
{}{}{}{}
A JSON 数组输出为:
[{}, {}, {}, {}]
除非我遗漏了什么。
.body(BodyInserters.fromFormData(stringFlux))
不确定这是否是正确答案。 发送 List<> as body
对我有用