微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在火箭 0.5.0-rc.1 中发布 JSON 数据?

如何解决如何在火箭 0.5.0-rc.1 中发布 JSON 数据?

我正在尝试构建一个 POST 处理程序,它接收带有 rocket 的 JSON 数据(版本:0.5.0-rc.1)。

这是我写的代码

use rocket::{post,response::content,routes,serde::{Deserialize,Serialize}};

#[derive(Debug,Deserialize,Serialize,Clone)]
#[serde(crate = "rocket::serde")]
#[serde(rename_all = "camelCase")]
pub struct MyData {
    a_field: String,}

#[post("/route",format = "json",data = "<data>")]
fn post_my_data(data: content::Json<MyData>) -> std::io::Result<()> { 

    Ok(())
}

#[rocket::launch]
fn rocket() -> _ {
    rocket::build()
    .mount("/",routes![forster_order])
}

但是我无法编译这个:

error[E0277]: the trait bound `rocket::response::content::Json<Order>: FromData<'_>` is not satisfied
   --> src\main.rs:17:25
    |
17  | fn post_my_data(data: content::Json<MyData>) -> std::io::Result<()> {
    |                         ^^^^^^^ the trait `FromData<'_>` is not implemented for `rocket::response::content::Json<Order>`
    | 
   ::: C:\Users\me\.cargo\registry\src\github.com-1ecc6299db9ec823\rocket-0.5.0-rc.1\src\data\from_data.rs:194:41
    |
194 |     async fn from_data(req: &'r Request<'_>,data: Data<'r>) -> Outcome<'r,Self>;
    |                                         -- required by this bound in `rocket::data::FromData::from_data`

error: aborting due to prevIoUs error

For more information about this error,try `rustc --explain E0277`.

example 中,我看到在结构上使用了生命周期标识符,即反序列化,但我使用的所有类型都不需要生命周期标识符,因此我无法为我的结构分配标识符。

我可以使用没有生命周期标识符的结构反序列化吗?

解决方法

您的问题与生命周期无关,您使用了错误的 Json 结构。您正在使用 rocket::response::content::Json,这可用于设置响应的 Content-Type(参见示例 this)。您想使用 rocket::serde::json::Json

//...
fn post_my_data(data: rocket::serde::json::Json<MyData>) -> std::io::Result<()> {
//...

请注意,您必须启用 Rocket 功能 json 才能使用此功能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。