这个 crate 提供了一个名为 Valid
的 axum 提取器,可以与 axum 框架的 Path
、Query
、Json
、Form
配合使用,自动调用 validator 库对其内部的对象自动进行合法性校验,也支持对自定义类型的提取器进行校验。
基本使用方法:
代码语言:javascript复制cargo add axum-valid
代码语言:javascript复制use validator::Validate;
use serde::Deserialize;
use axum_valid::Valid;
use axum::extract::Query;
use axum::Json;
#[derive(Debug, Validate, Deserialize)]
pub struct Pager {
#[validate(range(min = 1, max = 50))]
pub page_size: usize,
#[validate(range(min = 1))]
pub page_no: usize,
}
pub async fn get_page_by_query(
Valid(Query(pager)): Valid<Query<Pager>>,
) {
assert!((1..=50).contains(&pager.page_size));
assert!((1..).contains(&pager.page_no));
}
pub async fn get_page_by_json(
Valid(Json(pager)): Valid<Json<Pager>>,
) {
assert!((1..=50).contains(&pager.page_size));
assert!((1..).contains(&pager.page_no));
}
// ... 在 axum 的 router 中使用上述两个 handler
更详细具体的使用例子参考项目 tests 目录下的 basic.rs 和 custom.rs 文件。
该 crate 还提供了两个 feature:
422
: 验证错误时返回 422 而不是 400,不启用则默认使用 400.into_json
: 验证错误时会将错误对象序列化为 json 作为 http body 返回,不启用则默认使用 to_string.