Возврат объекта JsonValue из веб-сайта actix HttpRequest
Я читаю примеры actix-web, но, поскольку я совсем новичок в Rust, у меня возникают некоторые проблемы с пониманием того, как адаптировать код к моим потребностям.
Учитывая actix-сеть 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()
}
Будет ли лучше просто вернуть JsonValue
а не Future
?
1 ответ
Решение
Вы должны конвертировать JsonValue
в строку или байты, то вы можете установить его как HttpResponse
тело. Вы не можете напрямую вернуть JsonValue
вместо поля, потому что процесс чтения тела запроса является асинхронным.