我有一个API端点,利用actix_web
来反序列化传入的JSON负载(actix_web
最终使用serde
进行JSON反序列化)。
例如,我有这样的东西:
pub struct IncomingPayload {
pub field1: i32,
pub field2: String
}
pub async fn update_platforms(
pool: web::Data<Pool>,
req: web::Json<Vec<IncomingPayload>>,
) -> Result<HttpResponse, error::Error> {
println!(req.field1); // will be an i32
println!(req.field2); // will be a String
}
目前,只有当serde
能够反序列化结构体的所有字段时,此端点才会成功返回。也就是说,请求必须包含field1
和field2
键。
例如,以下请求将成功:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"field1": 1,"field2":"something"}' \
http://localhost:8080
但是由于载荷中缺少field2
,这样做是不行的:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"field1": 1}' \
http://localhost:8080
所以我的问题是,这能做到吗?可以使用一个子集键值对字段的JSON负载发送到期望所有字段都存在的actix_web
端点吗?
或者说,是否有一种通用的方法可以使用actix_web
或serde
反序列化此类部分结构体?