У меня есть конечная точка 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
, которая ожидает присутствия всех полей?
Или, скорее, есть общий c способ десериализации такие частичные структуры с actix_web
или serde
?