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}")