| 123456789101112131415161718192021222324252627 |
- from jsonschema import validate, ValidationError
- from app.core.biz_exception import NotFoundError, PermissionDeniedError, BizLogicError
- from jsonschema import validate, ValidationError
- def validate_user_inputs(schema_json: dict, user_inputs: dict):
- try:
- validate(instance=user_inputs, schema=schema_json)
- except ValidationError as e:
- # 1. 获取报错字段的路径 (例如: "user.phone")
- field = ".".join(map(str, e.path)) if e.path else "root"
-
- # 2. 优先尝试从 Schema 定义中获取人类可读的 'description' 或 'title'
- # e.schema 是当前校验失败的那个具体字段的 schema 定义片段
- custom_msg = e.schema.get("description") or e.schema.get("title")
-
- # 3. 构建错误信息
- if e.validator == 'pattern':
- # 如果是正则错误 (pattern),且我们定义了 description,就用 description
- # 如果没定义,就给一个通用的 "格式不正确"
- reason = custom_msg if custom_msg else "format is invalid"
- else:
- # 其他类型的错误(如类型不对、必填项缺失),保留原报错或也尝试用 description
- reason = custom_msg if custom_msg else e.message
- # 4. 抛出最终的人话提示
- raise BizLogicError(f"Invalid parameter [{field}]: {reason}")
|