如何将无效JSON请求正文中的错误描述返回到Rust中的客户端?

如何将无效JSON请求正文中的错误描述返回到Rust中的客户端?,rust,actix-web,Rust,Actix Web,在Python中,我可以使用或验证用户输入,只需定义一个非常类似于Rust结构的模式。然后使用该模式,Marshmallow加载用户输入并返回它发现的错误。例如: 通过实现ResponseError,我可以在actix web中自定义错误句柄 但是,如何将错误请求正文中无效值的描述位置/字段返回给客户端 我总是在寻找答案 不幸的是,包括actix在内的一些web框架在我们进行任何验证之前都会处理JSON错误。我一直在使用各种关键字进行搜索。其中一个是actix web validate JSON

在Python中,我可以使用或验证用户输入,只需定义一个非常类似于Rust结构的模式。然后使用该模式,Marshmallow加载用户输入并返回它发现的错误。例如:

通过实现ResponseError,我可以在actix web中自定义错误句柄

但是,如何将错误请求正文中无效值的描述位置/字段返回给客户端


我总是在寻找答案

不幸的是,包括actix在内的一些web框架在我们进行任何验证之前都会处理JSON错误。我一直在使用各种关键字进行搜索。其中一个是actix web validate JSON,它让我找到了许多验证器板条箱。但我从这句话中领悟到:

提取器是实现FromRequest特性的助手。换句话说,它们根据请求构造任何对象,并在此过程中执行验证。actixweb附带了一些有用的提取器,比如JSON,它使用serde_JSON来反序列化JSON请求体

所以,我搜索actix提取器并将

因此,这段代码取自解决我当前问题的方法

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


我总是在寻找答案

不幸的是,包括actix在内的一些web框架在我们进行任何验证之前都会处理JSON错误。我一直在使用各种关键字进行搜索。其中一个是actix web validate JSON,它让我找到了许多验证器板条箱。但我从这句话中领悟到:

提取器是实现FromRequest特性的助手。换句话说,它们根据请求构造任何对象,并在此过程中执行验证。actixweb附带了一些有用的提取器,比如JSON,它使用serde_JSON来反序列化JSON请求体

所以,我搜索actix提取器并将

因此,这段代码取自解决我当前问题的方法

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


我很抱歉误导你们:我之前的评论说不要将代码作为文本发布,但实际上我的意思是将代码作为文本而不是图像发布。如果这是一个借口的话,这里还是一大早。。。文字是好的。我为误导你们道歉:我之前的评论说不要将代码作为文字发布,但实际上我的意思是将代码作为文字发布,而不是图像。如果这是一个借口的话,这里还是一大早。。。文本是好的。格式!r{{error:{}},err这不会转义字符串。如果err包含或其他神奇的json字符,它将创建无效的json documentformat!r{{error:{}},err这不会转义字符串。如果err包含或其他神奇的json字符,它将创建一个无效的json文档