我自己在寻找解决方案时偶然发现了这一点,所以它可能对将来的某个人有用。
您可以使用warp::body::bytes()
不一定以 json 格式获取正文:
warp::body::bytes()
.map(|b: Bytes| {
println!("Request body: {}", std::str::from_utf8(b.bytes()).expect("error converting bytes to &str"));
"Hello, World!"
}
为了使其更加通用,我设法制作了一个可以在过滤器中轻松使用的功能:
fn log_body() -> impl Filter<Extract = (), Error = Rejection> + Copy {
warp::body::bytes()
.map(|b: Bytes| {
println!("Request body: {}", std::str::from_utf8(b.bytes()).expect("error converting bytes to &str"));
})
.untuple_one()
}
然后可以这样使用它:
let api = warp::any()
.and(log_body())
.and_then(handle);
有关完整示例,您可以查看我准备的要点。