You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打印Axum请求/响应中的所有Extensions内容?

问题

用调试格式化器打印Extensions拿不到有效内容:

println!("{:?}", parts.extensions);

输出只有:

Extensions

但调用parts.extensions.len()能看到它包含6个值。我知道怎么获取特定扩展,但想调试打印所有键值对。Extensions是个以类型为键的映射,官方文档里没找到直接打印所有内容的方法。

解决办法
  • 因为Extensions默认的Debug实现不会遍历所有键值对,你可以手动写遍历逻辑:
    直接用iter()方法遍历所有扩展项,打印每个项的类型名和对应值:

    for (type_id, value) in parts.extensions.iter() {
        let type_name = type_id.name();
        println!("{}: {:?}", type_name, value);
    }
    
  • 如果是第三方库的Extensions没法直接修改,还可以用新类型包装它,实现自定义Debug trait,这样就能用{:?}格式化输出所有内容:

    use std::fmt;
    
    struct DebugWrap<'a>(&'a Extensions);
    
    impl<'a> fmt::Debug for DebugWrap<'a> {
        fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
            f.debug_map()
                .entries(self.0.iter().map(|(id, val)| (id.name(), val)))
                .finish()
        }
    }
    
    // 调用时这么用
    println!("{:?}", DebugWrap(&parts.extensions));
    

内容的提问来源于stack exchange,提问作者Vitor de oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:22:11