Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 使用actix_web对部分结构进行Serde反序列化_Json_Rust_Serde_Rust Actix_Actix Web - Fatal编程技术网

Json 使用actix_web对部分结构进行Serde反序列化

Json 使用actix_web对部分结构进行Serde反序列化,json,rust,serde,rust-actix,actix-web,Json,Rust,Serde,Rust Actix,Actix Web,我有一个API端点,它利用actix_web反序列化传入的JSON负载actix_web最终使用serde进行JSON反序列化 作为一个例子,我有这样的东西: pub结构输入有效负载{ 发布字段1:i32, 发布字段2:字符串 } 发布异步fn更新\u平台 池:web::Data, req:web::Json, ->结果{ println!req.field1;//将是一个i32 println!req.field2;//将是一个字符串 } 目前,只有当serde能够反序列化结构的所有字段时,此

我有一个API端点,它利用actix_web反序列化传入的JSON负载actix_web最终使用serde进行JSON反序列化

作为一个例子,我有这样的东西:

pub结构输入有效负载{ 发布字段1:i32, 发布字段2:字符串 } 发布异步fn更新\u平台 池:web::Data, req:web::Json, ->结果{ println!req.field1;//将是一个i32 println!req.field2;//将是一个字符串 } 目前,只有当serde能够反序列化结构的所有字段时,此端点才会成功返回。即,请求必须包含字段1和字段2键

例如,这将是成功的:

curl-标题内容类型:application/json\ -请帖\ -数据“{field1:1,field2:something}”\ http://localhost:8080 但这并不是因为有效载荷中缺少field2:

curl-标题内容类型:application/json\ -请帖\ -数据“{field1:1}”\ http://localhost:8080 所以我的问题是,这能做到吗?可以将包含键值字段子集的JSON有效负载发送到希望所有字段都存在的actix_web端点吗

或者更确切地说,是否有一种通用方法可以使用actix_web或serde反序列化这样的部分结构?

您可以使用Option作为字段的类型,使其成为可选的。如果反序列化过程中缺少字段,则该字段将设置为无,否则将设置为Somevalue

[衍生产品系列化] 结构输入有效载荷{ 发布字段1:选项, 发布字段2:选项, } 对于实现默认值的类型,如果缺少字段,还可以使用[serdedefault]将字段设置为默认值

[衍生产品系列化] 结构输入有效载荷{ [serdedefault]//默认值=0 发布字段1:i32, [serdedefault]//默认值=空字符串 pub字段2:字符串, } 您可以使用Option作为字段的类型,使其成为可选的。如果反序列化过程中缺少字段,则该字段将设置为无,否则将设置为Somevalue

[衍生产品系列化] 结构输入有效载荷{ 发布字段1:选项, 发布字段2:选项, } 对于实现默认值的类型,如果缺少字段,还可以使用[serdedefault]将字段设置为默认值

[衍生产品系列化] 结构输入有效载荷{ [serdedefault]//默认值=0 发布字段1:i32, [serdedefault]//默认值=空字符串 pub字段2:字符串, }