Hyper 1.4升级后无法用hyper::body::to_bytes读取请求体
Hyper 1.x 读取请求体并解析JSON的方法
实现步骤
1. 提取请求体并转为字节数组
Hyper 1.x 中,hyper::body::to_bytes的参数不再是整个Request,而是Body类型。需要先从请求中提取出Body再进行转换:
use hyper::{Body, Request}; use hyper::body::to_bytes; async fn handle_request(req: Request<Body>) -> Result<(), Box<dyn std::error::Error>> { // 将请求体转换为字节数组 let bytes = to_bytes(req.into_body()).await?; // 后续处理逻辑
2. 转换为字符串并解析JSON
这一步和你之前的逻辑一致,先将字节数组转为UTF-8字符串,再用JSON库解析:
use std::str; use serde_json::from_str; // 转换为字符串 let body_str = str::from_utf8(&bytes)?; // 解析JSON let json_data = from_str(body_str)?; // 业务逻辑处理... Ok(()) }
关键注意事项
- Hyper 1.x 基于异步设计,所有读取请求体的操作必须在
async函数中通过.await执行 - 若请求体体积较大,
to_bytes会将全部数据加载到内存,此时建议使用流式处理:通过Body的data()方法逐块读取数据,避免内存占用过高
内容的提问来源于stack exchange,提问作者A Boston
相关产品推荐
相关产品推荐

