-1

将 json 从 HttpRequest 获取到您创建的结构中的最简单方法是什么。这是 main.rs

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
  HttpServer::new(|| {
    App::new()
      .data(web::JsonConfig::default().limit(4096))
      .data(connect())
      .service(web::resource("/insert").route(web::post().to(handlers::tours::insert)))
  })
  .bind("127.0.0.1:8088")
  .unwrap()
  .run()
  .await
}

这是 model/tour.rs 中的结构:

#[derive(Serialize, Deserialize, Insertable)]
pub struct TourForm {
  pub name: String,
}

这是 handlers/tours.rs:: 中的处理程序

pub async fn insert(
  tour_form: web::Json<TourForm>,
  pool: web::Data<MysqlPool>,
) -> Result<HttpResponse, HttpResponse> {
  Ok(HttpResponse::Ok().json(&tour_form.name))
}

我尝试了这种变体,因为我认为这会使代码变得非常简单:

pub async fn insert(
  tour_form: TourForm,
  pool: web::Data<MysqlPool>,
) -> Result<HttpResponse, HttpResponse> {
  Ok(HttpResponse::Ok().json(&tour_form.name))
}

但是得到了错误:

^^ the trait `actix_web::extract::FromRequest` is not implemented for `model::tour::TourForm`

我应该在 TourForm 结构中实现 FromRequest 函数还是有更简单的方法?

4

1 回答 1

0

我可以通过执行 tour_form.0 从 web::Json 中获取 TourForm 对象

pub async fn insert(
  tour_form: web::Json<TourForm>,
  pool: web::Data<MysqlPool>,
) -> Result<HttpResponse, HttpResponse> {
  Ok(HttpResponse::Ok().json(&tour_form.0))
}
于 2020-06-01T18:05:24.950 回答