叁强鲜配 - 接口输入校验规则
目录
一、校验规则概述
1.1 校验层次
| 层次 |
说明 |
执行位置 |
| 前端校验 |
提升用户体验,减轻服务器压力 |
前端页面 |
| 后端校验 |
确保数据安全性和完整性 |
后端API |
| 数据库校验 |
最后一道防线,确保数据一致性 |
数据库约束 |
1.2 校验类型
| 类型 |
说明 |
示例 |
| 必填校验 |
参数不能为空 |
username不能为空 |
| 类型校验 |
参数类型正确 |
page必须为整数 |
| 格式校验 |
参数格式正确 |
phone必须为11位手机号 |
| 范围校验 |
参数在允许范围内 |
quantity必须大于0 |
| 业务规则校验 |
符合业务逻辑 |
价格版本必须生效 |
| 权限校验 |
用户有操作权限 |
只有运营能创建用户 |
1.3 错误响应格式
{
"code": 400,
"message": "参数校验失败",
"errors": [
{
"field": "username",
"message": "用户名不能为空"
}
]
}
二、通用校验规则
2.1 字符串类型校验
| 规则 |
说明 |
示例 |
| 非空 |
不能为空字符串、null、undefined |
- |
| 长度范围 |
在最小和最大长度之间 |
4-20字符 |
| 格式 |
符合特定格式 |
手机号、邮箱、身份证 |
| 枚举 |
在允许的值列表中 |
admin/supplier/client/deliver |
2.2 数值类型校验
| 规则 |
说明 |
示例 |
| 非空 |
不能为null、undefined |
- |
| 数值范围 |
在最小和最大值之间 |
0-999999 |
| 精度 |
小数位数不超过指定值 |
最多4位小数 |
| 整数 |
必须为整数 |
page必须是整数 |
2.3 数组类型校验
| 规则 |
说明 |
示例 |
| 非空 |
数组不能为空 |
items.length > 0 |
| 元素类型 |
数组元素类型一致 |
items中每个都是对象 |
| 元素数量 |
元素数量在范围内 |
1-100个 |
2.4 日期类型校验
| 规则 |
说明 |
示例 |
| 非空 |
不能为空 |
- |
| 格式 |
符合ISO 8601格式 |
2026-03-19T10:00:00+08:00 |
| 范围 |
在允许的时间范围内 |
不能早于当前时间 |
三、用户模块校验规则
3.1 登录接口 POST /api/web/auth/login
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| username |
string |
是 |
非空,4-20字符 |
"用户名不能为空" / "用户名长度必须在4-20字符之间" |
| password |
string |
是 |
非空,6-20字符 |
"密码不能为空" / "密码长度必须在6-20字符之间" |
3.2 修改密码接口 POST /api/web/user/change-password
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| oldPassword |
string |
是 |
非空,6-20字符,与原密码一致 |
"原密码不能为空" / "原密码错误" |
| newPassword |
string |
是 |
非空,6-20字符,不能与原密码相同,复杂度符合要求 |
"新密码不能为空" / "新密码长度必须在6-20字符之间" / "新密码不能与原密码相同" / "密码复杂度不足" |
密码复杂度要求
- 简单:仅字母或仅数字
- 中等:字母+数字
- 复杂:字母+数字+特殊字符
3.3 创建用户接口 POST /api/web/users
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| username |
string |
是 |
非空,4-20字符,唯一性 |
"用户名不能为空" / "用户名已被注册" |
| realName |
string |
是 |
非空,2-50字符 |
"姓名不能为空" / "姓名长度必须在2-50字符之间" |
| phone |
string |
是 |
非空,11位手机号,格式正确 |
"手机号不能为空" / "手机号格式不正确" |
| role |
string |
是 |
枚举值:admin/supplier/client/deliver |
"角色不正确" |
| regionId |
string |
否 |
当role为supplier/client/deliver时必填,对应区域存在 |
"区域不存在" |
3.4 更新用户接口 PUT /api/web/users/{userId}
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| realName |
string |
否 |
2-50字符 |
"姓名长度必须在2-50字符之间" |
| phone |
string |
否 |
11位手机号,格式正确 |
"手机号格式不正确" |
| regionId |
string |
否 |
对应区域存在 |
"区域不存在" |
| isActive |
boolean |
否 |
true/false |
"状态值不正确" |
3.5 用户列表查询 GET /api/web/users
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| page |
int |
否 |
大于等于1 |
"页码必须大于等于1" |
| pageSize |
int |
否 |
1-100 |
"每页条数必须在1-100之间" |
| role |
string |
否 |
枚举值 |
"角色筛选值不正确" |
| isActive |
boolean |
否 |
true/false |
"状态筛选值不正确" |
四、地址模块校验规则
4.1 创建地址接口 POST /api/mini/client/addresses
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| addressType |
string |
是 |
枚举值:pickup/delivery/both |
"地址类型不正确" |
| contactPerson |
string |
是 |
非空,2-20字符 |
"联系人不能为空" / "联系人长度必须在2-20字符之间" |
| contactPhone |
string |
是 |
非空,11位手机号 |
"联系电话不能为空" / "手机号格式不正确" |
| province |
string |
是 |
非空 |
"省份不能为空" |
| city |
string |
是 |
非空 |
"城市不能为空" |
| district |
string |
否 |
- |
- |
| detailAddress |
string |
是 |
非空,5-500字符 |
"详细地址不能为空" / "详细地址长度必须在5-500字符之间" |
| isDefault |
boolean |
否 |
true/false |
- |
4.2 地址类型说明
| 值 |
说明 |
适用场景 |
| pickup |
取货地址 |
供应商/客户设置取货点 |
| delivery |
配送地址 |
客户设置收货点 |
| both |
两者皆是 |
地址同时作为取货和配送点 |
五、商品模块校验规则
5.1 创建商品分类 POST /api/web/product-categories
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| name |
string |
是 |
非空,2-100字符,唯一性 |
"分类名称不能为空" / "分类名称已存在" |
| parentId |
string |
否 |
对应分类存在或为空 |
"父分类不存在" |
| sortOrder |
int |
否 |
大于等于0 |
"排序值必须大于等于0" |
5.2 创建商品单位 POST /api/web/product-units
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| name |
string |
是 |
非空,1-50字符,唯一性 |
"单位名称不能为空" / "单位名称已存在" |
| code |
string |
是 |
非空,1-20字符,唯一性 |
"单位编码不能为空" / "单位编码已存在" |
5.3 创建商品 POST /api/web/products
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| name |
string |
是 |
非空,2-200字符 |
"商品名称不能为空" / "商品名称长度必须在2-200字符之间" |
| categoryId |
string |
是 |
对应分类存在 |
"商品分类不存在" |
| unitId |
string |
是 |
对应单位存在 |
"商品单位不存在" |
| description |
string |
否 |
最大1000字符 |
"商品描述长度不能超过1000字符" |
| imageUrl |
string |
否 |
合法的URL格式 |
"图片URL格式不正确" |
5.4 查询商品列表 GET /api/web/products
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| page |
int |
否 |
大于等于1 |
"页码必须大于等于1" |
| pageSize |
int |
否 |
1-100 |
"每页条数必须在1-100之间" |
| categoryId |
string |
否 |
对应分类存在 |
"商品分类不存在" |
| isActive |
boolean |
否 |
true/false |
"状态筛选值不正确" |
六、订单模块校验规则
6.1 订单预览 POST /api/mini/client/orders/preview
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| priceListId |
string |
是 |
对应价格清单存在且状态为active |
"价格清单不存在或已失效" |
| items |
array |
是 |
非空数组 |
"订单商品不能为空" |
| items[].productId |
string |
是 |
对应商品存在 |
"商品不存在" |
| items[].quantity |
number |
是 |
大于0,最多4位小数 |
"商品数量必须大于0" |
| addressId |
string |
是 |
对应地址存在且属于当前用户 |
"收货地址不存在" |
6.2 创建订单 POST /api/mini/client/orders
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| priceListId |
string |
是 |
对应价格清单存在且状态为active |
"价格清单不存在或已失效" |
| items |
array |
是 |
非空数组 |
"订单商品不能为空" |
| items[].productId |
string |
是 |
对应商品存在 |
"商品不存在" |
| items[].unitId |
string |
是 |
对应单位存在 |
"单位不存在" |
| items[].quantity |
number |
是 |
大于0,最多4位小数 |
"商品数量必须大于0" |
| items[].unitPrice |
number |
是 |
大于0,2位小数,与价格清单一致 |
"商品价格不匹配" |
| addressId |
string |
是 |
对应地址存在且属于当前用户 |
"收货地址不存在" |
| paymentMethod |
string |
是 |
枚举值:wechat/offline |
"支付方式不正确" |
| remark |
string |
否 |
最大500字符 |
"备注长度不能超过500字符" |
6.3 从购物车创建订单 POST /api/mini/client/orders/from-cart
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| priceListId |
string |
是 |
对应价格清单存在且状态为active |
"价格清单不存在或已失效" |
| cartIds |
array |
是 |
非空数组,元素为购物车ID |
"请选择要结算的商品" |
| addressId |
string |
是 |
对应地址存在且属于当前用户 |
"收货地址不存在" |
| paymentMethod |
string |
是 |
枚举值:wechat/offline |
"支付方式不正确" |
| remark |
string |
否 |
最大500字符 |
"备注长度不能超过500字符" |
6.4 取消订单
直接取消(未支付)POST /api/mini/client/orders/{orderId}/direct-cancel
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| reason |
string |
否 |
最大200字符 |
"取消原因长度不能超过200字符" |
申请取消(已支付)POST /api/mini/client/orders/{orderId}/cancel
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| reason |
string |
是 |
非空,2-200字符 |
"取消原因不能为空" / "取消原因长度必须在2-200字符之间" |
6.5 运营审核取消 POST /api/web/orders/{orderId}/review-cancel
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| approved |
boolean |
是 |
true/false |
"审核结果不正确" |
| reviewNote |
string |
否 |
最大200字符 |
"审核备注长度不能超过200字符" |
6.6 运营分配配送 POST /api/web/orders/{orderId}/assign-delivery
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| deliverId |
string |
是 |
对应配送员存在、状态正常、属于当前区域 |
"配送员不存在或不可用" |
6.7 运营调整订单 POST /api/web/orders/{orderId}/adjust
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| items |
array |
是 |
非空数组 |
"调整项不能为空" |
| items[].orderItemId |
string |
是 |
对应订单项存在 |
"订单项不存在" |
| items[].quantity |
number |
否 |
大于0,最多4位小数 |
"调整后数量必须大于0" |
| items[].status |
string |
否 |
枚举值:normal/reduced/deleted/substituted |
"调整状态不正确" |
| items[].note |
string |
否 |
最大200字符 |
"备注长度不能超过200字符" |
| reason |
string |
是 |
非空,2-200字符 |
"调整原因不能为空" / "调整原因长度必须在2-200字符之间" |
| refundAmount |
number |
否 |
大于等于0,不超过已支付金额 |
"退款金额不正确" |
6.8 催单 POST /api/mini/client/orders/{orderId}/urge
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| - |
- |
- |
订单状态为delivering或pending_confirm |
"当前状态不允许催单" |
| - |
- |
- |
当天催单次数小于3 |
"超出催单次数限制" |
七、配送模块校验规则
7.1 运营分配配送任务 POST /api/web/delivery-tasks/assign
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| orderId |
string |
是 |
对应订单存在、状态为pending_delivery |
"订单不存在或状态不正确" |
| deliverId |
string |
是 |
对应配送员存在、状态正常、属于同一区域 |
"配送员不存在或不可用" |
7.2 批量分配配送任务 POST /api/web/delivery-tasks/assign-batch
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| assignments |
array |
是 |
非空数组,1-50个元素 |
"分配任务不能为空" / "批量分配数量不能超过50个" |
| assignments[].orderId |
string |
是 |
对应订单存在、状态为pending_delivery |
"订单状态不正确" |
| assignments[].deliverId |
string |
是 |
对应配送员存在、状态正常 |
"配送员不存在或不可用" |
7.3 配送员确认取货 POST /api/mini/deliverer/tasks/{taskId}/pickup
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| remark |
string |
否 |
最大200字符 |
"备注长度不能超过200字符" |
| imageUrls |
array |
否 |
最多10个,每个为合法URL |
"图片数量不能超过10张" / "图片URL格式不正确" |
7.4 配送员确认送达 POST /api/mini/deliverer/tasks/{taskId}/deliver
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| items |
array |
是 |
非空数组 |
"配送明细不能为空" |
| items[].taskItemId |
string |
是 |
对应配送明细存在 |
"配送明细不存在" |
| items[].deliveredQuantity |
number |
是 |
大于等于0,不超过原数量 |
"送达数量不正确" |
| remark |
string |
否 |
最大200字符 |
"备注长度不能超过200字符" |
| imageUrls |
array |
否 |
最多10个,每个为合法URL |
"图片数量不能超过10张" |
7.5 配送员取消任务 POST /api/mini/deliverer/tasks/{taskId}/cancel
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| reason |
string |
是 |
非空,2-200字符 |
"取消原因不能为空" / "取消原因长度必须在2-200字符之间" |
| images |
array |
否 |
最多5个,每个为合法URL |
"图片数量不能超过5张" |
7.6 配送员换班交接 POST /api/mini/deliverer/handover
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| handoverType |
string |
是 |
枚举值:shift_out/shift_in |
"交接类型不正确" |
| targetDeliverId |
string |
条件 |
handoverType为shift_out时必填 |
对应配送员存在、状态正常 |
| remark |
string |
否 |
最大200字符 |
"备注长度不能超过200字符" |
| taskIds |
array |
是 |
非空数组,元素为配送任务ID |
"请选择要交接的任务" |
7.7 供应商确认取货 POST /api/mini/supplier/pickup-tasks/{taskId}/confirm
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| remark |
string |
否 |
最大200字符 |
"备注长度不能超过200字符" |
| imageUrls |
array |
否 |
最多10个,每个为合法URL |
"图片数量不能超过10张" |
八、询价报价模块校验规则
8.1 创建询价单 POST /api/web/inquiries
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| title |
string |
是 |
非空,2-100字符 |
"询价单标题不能为空" / "标题长度必须在2-100字符之间" |
| regionId |
string |
是 |
对应区域存在 |
"区域不存在" |
| productIds |
array |
是 |
非空数组,元素为商品ID |
"请选择询价商品" |
| expireTime |
datetime |
否 |
ISO 8601格式,晚于当前时间 |
"截止时间必须晚于当前时间" |
| remark |
string |
否 |
最大500字符 |
"备注长度不能超过500字符" |
8.2 发布询价单 POST /api/web/inquiries/{inquiryId}/publish
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| - |
- |
- |
询价单状态为draft |
"当前状态不允许发布" |
| - |
- |
- |
询价单中至少有一个商品 |
"询价单中至少需要一个商品" |
8.3 关闭询价单 POST /api/web/inquiries/{inquiryId}/close
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| - |
- |
- |
询价单状态为published |
"当前状态不允许关闭" |
8.4 供应商提交报价 POST /api/mini/supplier/quotations
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| inquiryId |
string |
是 |
对应询价单存在、状态为published、未过期 |
"询价单不存在或已截止" |
| items |
array |
是 |
非空数组 |
"报价项不能为空" |
| items[].productId |
string |
是 |
对应商品在询价单中存在 |
"商品不在询价范围内" |
| items[].unitId |
string |
是 |
对应单位存在 |
"单位不存在" |
| items[].price |
number |
是 |
大于0,2位小数 |
"价格必须大于0" |
| remark |
string |
否 |
最大500字符 |
"备注长度不能超过500字符" |
8.5 审核报价 POST /api/web/quotations/{quotationId}/review
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| status |
string |
是 |
枚举值:approved/rejected |
"审核结果不正确" |
| reviewNote |
string |
否 |
最大200字符 |
"审核备注长度不能超过200字符" |
九、价格模块校验规则
9.1 创建价格清单 POST /api/web/price-lists
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| regionId |
string |
是 |
对应区域存在 |
"区域不存在" |
| supplierId |
string |
是 |
对应供应商存在且在同一区域 |
"供应商不存在或不在该区域" |
| effectiveTime |
datetime |
是 |
ISO 8601格式 |
"生效时间格式不正确" |
| effectiveType |
string |
是 |
枚举值:immediate/scheduled |
"生效方式不正确" |
| expireTime |
datetime |
否 |
ISO 8601格式,晚于effectiveTime |
"失效时间必须晚于生效时间" |
| items |
array |
是 |
非空数组 |
"价格项不能为空" |
| items[].productId |
string |
是 |
对应商品存在 |
"商品不存在" |
| items[].unitId |
string |
是 |
对应单位存在 |
"单位不存在" |
| items[].price |
number |
是 |
大于0,2位小数 |
"价格必须大于0" |
| remark |
string |
否 |
最大500字符 |
"备注长度不能超过500字符" |
9.2 发布价格清单 POST /api/web/price-lists/{priceListId}/publish
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| - |
- |
- |
价格清单状态为draft或pending |
"当前状态不允许发布" |
| - |
- |
- |
价格清单中至少有一个商品 |
"价格清单中至少需要一个商品" |
十、结算模块校验规则
10.1 确认线下结算 POST /api/web/settlements
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| orderId |
string |
是 |
对应订单存在、支付方式为offline、状态正确 |
"订单不存在或状态不正确" |
| settlementMethod |
string |
是 |
枚举值:transfer/cash/other |
"结算方式不正确" |
| settlementTime |
datetime |
是 |
ISO 8601格式 |
"结算时间格式不正确" |
| settlementNote |
string |
否 |
最大200字符 |
"结算备注长度不能超过200字符" |
| attachmentUrl |
string |
否 |
合法URL |
"附件URL格式不正确" |
10.2 批量确认结算 POST /api/web/settlements/batch
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| orderIds |
array |
是 |
非空数组,1-50个元素 |
"请选择要结算的订单" |
| settlementMethod |
string |
是 |
枚举值:transfer/cash/other |
"结算方式不正确" |
| settlementTime |
datetime |
是 |
ISO 8601格式 |
"结算时间格式不正确" |
10.3 微信退款 POST /api/web/refunds/wechat-refund/{orderId}
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| refundAmount |
number |
是 |
大于0,不超过已支付金额 |
"退款金额不正确" |
| reason |
string |
否 |
最大200字符 |
"退款原因长度不能超过200字符" |
十一、支付模块校验规则
11.1 发起微信支付 POST /api/mini/client/orders/{orderId}/wechat-pay
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| - |
- |
- |
订单状态为pending_payment |
"当前状态不允许支付" |
| - |
- |
- |
订单支付方式为wechat |
"该订单不支持微信支付" |
11.2 微信支付回调 POST /api/web/pay/wechat-notify
| 参数 |
类型 |
必填 |
校验规则 |
错误提示 |
| return_code |
string |
是 |
SUCCESS/FAIL |
- |
| transaction_id |
string |
条件 |
return_code为SUCCESS时必填 |
微信订单号 |
| out_trade_no |
string |
条件 |
return_code为SUCCESS时必填 |
商户订单号 |
十二、其他模块校验规则
12.1 发票管理
| 接口 |
参数 |
校验规则 |
错误提示 |
| 开具发票 |
amount |
大于0,不超过订单已支付金额 |
"开票金额不正确" |
| 开具发票 |
taxRate |
枚举值:3/6/9/13 |
"税率不正确" |
| 开具发票 |
clientTaxNo |
当发票类型为vat时必填 |
"税号不能为空" |
12.2 消息通知
| 参数 |
校验规则 |
错误提示 |
| title |
非空,最大100字符 |
"消息标题不能为空" / "标题长度不能超过100字符" |
| content |
非空,最大1000字符 |
"消息内容不能为空" / "内容长度不能超过1000字符" |
| receiverIds |
当receiverType为指定类型时必填 |
"请选择接收者" |
12.3 文件上传
| 参数 |
校验规则 |
错误提示 |
| file |
必填 |
"请选择要上传的文件" |
| file.size |
不超过10MB |
"文件大小不能超过10MB" |
| file.type |
在允许的类型列表中 |
"不支持的文件类型" |
允许的文件类型
- 图片:jpg、jpeg、png、gif、webp
- 文档:pdf、doc、docx、xls、xlsx
- 压缩包:zip、rar
附录:校验错误码汇总
| 错误码 |
说明 |
适用场景 |
| 40001 |
必填参数为空 |
缺少必填参数 |
| 40002 |
参数类型错误 |
参数类型不匹配 |
| 40003 |
参数格式错误 |
格式不符合要求 |
| 40004 |
参数长度超限 |
超出长度限制 |
| 40005 |
参数值不在范围内 |
超出允许范围 |
| 40006 |
枚举值不正确 |
不在允许列表中 |
| 40007 |
URL格式错误 |
不是合法的URL |
| 40008 |
日期格式错误 |
不是合法的日期格式 |
| 40009 |
金额格式错误 |
小数位数超出限制 |
| 40010 |
数量精度错误 |
小数位数超出限制 |