You need to enable JavaScript to run this app. WebFlux 2.5.2如何从ServerRequest中提取POST请求的纯文本请求体
优惠活动
大模型
产品
解决方案
定价
更多

WebFlux 2.5.2如何从ServerRequest中提取POST请求的纯文本请求体

问题原因及解决方法

你当前使用request.bodyToMono(String.class)本身就是从ServerRequest提取纯文本请求体的正确方法,代码无法正常运行是因为Reactive流的操作逻辑有误:

  • Reactor中Mono/Flux都是不可变对象,调用map/flatMap等操作符后会返回全新的Mono/Flux实例,不会修改原对象。你代码中responseBody.map(s -> s + " -- 服务端添加的内容.")执行后没有接收返回值,这行代码属于无效操作,最终返回的还是未经过处理的原始请求体Mono。
  • 如果你是在断点调试时直接查看Mono实例的取值报错,属于正常现象:Mono是异步数据流容器,只有被订阅时才会触发数据发射,不能以同步方式直接读取内部的值。

修正后的完整代码

修改AppHandler中的process方法即可:

public Mono<ServerResponse> process(ServerRequest request){
    // 链式操作所有流处理逻辑,最后直接拼接返回逻辑
    return request.bodyToMono(String.class)
            // 如果需要调试查看请求体内容,添加doOnNext回调即可
            .doOnNext(rawBody -> System.out.println("接收到的纯文本请求体:" + rawBody))
            // 处理请求体内容
            .map(rawBody -> rawBody + " -- 服务端添加的内容.")
            // 构造响应
            .flatMap(processedBody -> ServerResponse.ok()
                    .contentType(MediaType.TEXT_PLAIN)
                    .bodyValue(processedBody));
}

注意事项

你当前路由配置中指定了POST接口的contentType(MediaType.TEXT_PLAIN),所以调用该接口时必须在请求头中设置Content-Type: text/plain,否则会返回415不支持的媒体类型错误。如果需要支持接收任意类型的纯文本内容,可以去掉路由中的contentType限制,或者添加更多支持的媒体类型规则。

内容的提问来源于stack exchange,提问作者MMR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 21:24:01