WebClient发送POST请求时能否将Flux作为请求体传递?
WebClient传递Flux请求体的实现方案
正确代码写法
你可以直接将Flux作为Publisher传入body方法,指定元素类型即可,无需手动转换为列表:
Flux<Product> getProducts(Flux<String> ids) { return webClient.post().uri("/products") .body(ids, String.class) .retrieve() .bodyToFlux(Product.class); }
你也可以显式调用BodyInserters方法实现相同效果:
.body(BodyInserters.fromPublisher(ids, String.class))
说明
- 上述写法会直接以响应式流的形式传递数据,不会提前收集所有id转为List,完全符合你的需求。
- WebClient会自动将流内的字符串元素序列化为JSON数组发送,服务端的
@RequestBody Flux<String>可以直接正常解析接收。 - 如果需要使用流式媒体类型,可在body方法前添加
.contentType(MediaType.APPLICATION_NDJSON)指定,默认的application/json也可正常处理该场景。
注意:服务端需保留WebFlux默认的Jackson编解码器配置,无需额外修改即可支持流式请求体解析。
内容的提问来源于stack exchange,提问作者Monta
相关产品推荐
相关产品推荐

