如何 return 无效 JSON 请求正文中的错误描述给 Rust 中的客户端?

How to return the error description in a invalid JSON request body to the client in Rust?

在 Python 中,我可以使用 marshmallow or Pydantic 通过定义模式(很像 Rust 结构)来验证用户输入。然后使用该架构,Marshmallow 加载用户输入并 returns 它发现的错误。

我可以通过实现 ResponseError.

在 actix-web 中自定义错误句柄

但是,我如何return向客户端发送错误请求正文中的描述(position/field无效值)?

我一直在寻找答案。

不幸的是,在我们进行任何验证之前,包括 actix 在内的某些 Web 框架会处理 JSON 错误。我一直在寻找使用各种关键字。其中之一是“actix-web validate JSON”,这让我找到了许多验证器箱。但我从这个 blog 中得到了见解:

Extractors are helpers that implement the FromRequest trait. In other words, they construct any object from a request and perform validation along the way. A handful of useful extractors are shipped with Actix web, such as JSON which uses serde_json to deserialize a JSON request body

所以,我搜索“actix Extractor”并带给我 Extractor Doc and custom handling of extractor errors

所以这段摘自 this boilerplate 解决了我当前的问题。

   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()
+      }))