在 Python 中,我可以使用marshmallow或Pydantic来验证用户输入,只需定义一个模式(很像 Rust 结构)。然后使用该模式,Marshmallow 加载用户输入并返回它发现的错误。如:


我可以通过在 actix-web 中实现自定义错误句柄ResponseError。
但是,如何将错误请求正文中的描述(无效值的位置/字段)返回给客户端?

我一直在寻找答案。
不幸的是,包括 actix 在内的一些 Web 框架在我们进行任何验证之前会处理 JSON 错误。我一直在寻找使用各种关键字。其中之一是“actix-web 验证 JSON”,它让我找到了许多验证器箱。但我从这个博客中得到了见解:
提取器是实现 FromRequest 特性的助手。换句话说,他们根据请求构造任何对象并在此过程中执行验证。Actix web 附带了一些有用的提取器,例如 JSON,它使用 serde_json 反序列化 JSON 请求正文
因此,我搜索“actix Extractor”并为我带来Extractor Doc和提取器错误的自定义处理
所以这个片段取自这个样板解决了我当前的问题。
App::new()
.configure(health::init)
.configure(students::init)
+ .app_data(web::JsonConfig::default().error_handler(|err, _req| {
+ error::InternalError::from_response(
+ "",
+ HttpResponse::BadRequest()
+ .content_type("application/json")
+ .body(format!(r#"{{"error":"{}"}}"#, err)),
+ )
+ .into()
+ }))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |