Rust使用reqwest报错no method named `json` found for impl Future如何解决
错误产生原因
- reqwest默认提供的顶层
reqwest::get为异步API,调用后返回的是实现了Futuretrait的异步待执行对象,并非请求完成后的Response实体,Future本身没有定义json方法,因此调用时抛出找不到方法的错误。 - Cargo.toml中的依赖配置存在拼写错误:启用特性的字段名为
features,你编写的feature为错误拼写,会导致声明的blocking、json特性没有实际生效。
修复方案
可根据你的工程架构选择以下任意一种方案:
方案1:使用blocking同步API(适配非异步工程)
- 先修正Cargo.toml中的依赖配置:
reqwest = {version = "0.11.4", features = ["blocking", "json"]}
- 调整业务代码,使用blocking模块下的同步方法:
use std::collections::HashMap; pub fn get_user_info(id: i64) -> &'static str { // 调用blocking同步get,请求完成后直接返回Response let resp = reqwest::blocking::get("https://httpbin.org/ip") .unwrap() // 此处仅为示例,实际开发请处理请求错误 .json::<HashMap<String, String>>() .unwrap(); // 此处仅为示例,实际开发请处理Json解析错误 println!("{:#?}", resp); return "ok"; }
方案2:保留异步逻辑(适配异步工程)
如果你的工程基于异步架构开发,不需要启用blocking特性,调整代码适配异步规则即可:
use std::collections::HashMap; // 函数声明为异步 pub async fn get_user_info(id: i64) -> &'static str { // 对Future执行await拿到Response let resp = reqwest::get("https://httpbin.org/ip") .await .unwrap() // 处理请求错误,示例用unwrap简化 .json::<HashMap<String, String>>() .await .unwrap(); // 处理Json解析错误,示例用unwrap简化 println!("{:#?}", resp); return "ok"; }
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

