Rust 从actix web HttpRequest返回JsonValue对象

Rust 从actix web HttpRequest返回JsonValue对象,rust,rust-actix,Rust,Rust Actix,我正在阅读actix web的示例,但由于我对Rust还很陌生,因此在理解如何使代码适应我的需要时遇到了一些问题 给定一个actixwebHttpRequest,我想解析负载并返回一个JsonValue。我不知道如何更改此函数以返回JsonValue而不是HttpResponse fn index_mjsonrust(req: &HttpRequest, ) -> Box<Future<Item = HttpResponse, Error = Error>>

我正在阅读actix web的示例,但由于我对Rust还很陌生,因此在理解如何使代码适应我的需要时遇到了一些问题

给定一个actixweb
HttpRequest
,我想解析负载并返回一个
JsonValue
。我不知道如何更改此函数以返回
JsonValue
而不是
HttpResponse

fn index_mjsonrust(req: &HttpRequest, ) -> Box<Future<Item = HttpResponse, Error = Error>> {
    req.payload()
        .concat2()
        .from_err()
        .and_then(|body| {
            // body is loaded, now we can deserialize json-rust
            let result = json::parse(std::str::from_utf8(&body).unwrap()); // return Result
            let injson: JsonValue = match result {
                Ok(v) => v,
                Err(e) => object!{"err" => e.to_string() },
            };
            Ok(HttpResponse::Ok()
                .content_type("application/json")
                .body(injson.dump()))
        })
        .responder()
}
fn索引\u mjsonrust(请求:&HttpRequest,)->Box{
请求有效载荷()
.concat2()
.from_err()
.然后|身体|{
//主体已加载,现在我们可以反序列化json
let result=json::parse(std::str::from_utf8(&body).unwrap());//返回结果
让injson:JsonValue=匹配结果{
Ok(v)=>v,
Err(e)=>object!{“Err”=>e.to_string()},
};
Ok(HttpResponse::Ok()
.content_类型(“应用程序/json”)
.body(injson.dump())
})
.responder()
}

只返回
JsonValue
是否比返回
未来的
更好?

您必须将
JsonValue
转换为字符串或字节,然后可以将其设置为
HttpResponse
正文。您不能直接返回
JsonValue
而不是box,因为请求正文读取过程是异步的。

您必须将
JsonValue
转换为字符串或字节,然后可以将其设置为
HttpResponse
正文。您不能直接返回
JsonValue
而不是box,因为请求正文读取过程是异步的。

请查看如何创建,然后查看您的问题以包含它。我们无法说出代码中存在哪些板条箱(和版本)、类型、特征、字段等。显示所有导入的类型很重要。寻求调试帮助的问题必须包括一个特定的错误以及重现该错误所需的最短代码。试着制造一些能再现你在网络上的错误的东西,或者你可以在一个全新的货运项目中再现它。也有。请检查如何创建一个,然后检查您的问题以将其包括在内。我们无法说出代码中存在哪些板条箱(和版本)、类型、特征、字段等。显示所有导入的类型很重要。寻求调试帮助的问题必须包括一个特定的错误以及重现该错误所需的最短代码。试着制造一些能再现你在网络上的错误的东西,或者你可以在一个全新的货运项目中再现它。也有。