4.6 KiB
4.6 KiB
Handler请求绑定方式更新总结
概述
根据用户要求,将handler中的请求体参数绑定方式从ShouldBindJSON统一更新为使用h.validator.BindAndValidate,以保持代码风格的一致性和更好的验证处理。
主要变更
1. 更新的文件
internal/infrastructure/http/handlers/finance_handler.go
更新的方法:
-
ApplyInvoice - 申请开票
// 更新前 if err := c.ShouldBindJSON(&req); err != nil { h.responseBuilder.BadRequest(c, "请求参数错误", err) return } // 更新后 if err := h.validator.BindAndValidate(c, &req); err != nil { h.responseBuilder.BadRequest(c, "请求参数错误", err) return } -
UpdateUserInvoiceInfo - 更新用户发票信息
// 更新前 if err := c.ShouldBindJSON(&req); err != nil { h.responseBuilder.BadRequest(c, "请求参数错误", err) return } // 更新后 if err := h.validator.BindAndValidate(c, &req); err != nil { h.responseBuilder.BadRequest(c, "请求参数错误", err) return } -
RejectInvoiceApplication - 拒绝发票申请
// 更新前 if err := c.ShouldBindJSON(&req); err != nil { h.responseBuilder.BadRequest(c, "请求参数错误", err) return } // 更新后 if err := h.validator.BindAndValidate(c, &req); err != nil { h.responseBuilder.BadRequest(c, "请求参数错误", err) return }
internal/infrastructure/http/handlers/api_handler.go
更新的方法:
- AddWhiteListIP - 添加白名单IP
// 更新前 if err := c.ShouldBindJSON(&req); err != nil { h.responseBuilder.BadRequest(c, "请求参数错误") return } // 更新后 if err := h.validator.BindAndValidate(c, &req); err != nil { h.responseBuilder.BadRequest(c, "请求参数错误") return }
2. 保持不变的文件
internal/shared/validator/validator.go
BindAndValidate方法内部仍然使用c.ShouldBindJSON(dto)- 这是正确的,因为validator需要先绑定JSON数据,然后再进行验证
- 这是validator的实现细节,不需要修改
技术优势
1. 统一的验证处理
- 所有handler都使用相同的验证方式
- 统一的错误处理和响应格式
- 更好的代码一致性
2. 更好的错误信息
BindAndValidate提供了更详细的验证错误信息- 支持中文字段名显示
- 更友好的用户错误提示
3. 验证规则支持
- 支持自定义验证规则
- 支持字段翻译
- 支持复杂的业务验证逻辑
4. 代码维护性
- 统一的验证逻辑
- 便于后续验证规则的修改
- 减少重复代码
验证流程
1. 使用h.validator.BindAndValidate的流程
请求到达 → BindAndValidate → JSON绑定 → 结构体验证 → 返回结果
2. 错误处理流程
验证失败 → 格式化错误信息 → 返回BadRequest响应 → 前端显示错误
验证器功能
1. 支持的验证标签
required- 必填字段email- 邮箱格式min/max- 长度限制phone- 手机号格式strong_password- 强密码social_credit_code- 统一社会信用代码id_card- 身份证号price- 价格格式uuid- UUID格式url- URL格式- 等等...
2. 错误信息本地化
- 支持中文字段名
- 支持中文错误消息
- 支持自定义错误消息
兼容性
1. API接口保持不变
- 请求和响应格式完全一致
- 前端调用方式无需修改
- 向后兼容
2. 错误响应格式
- 保持原有的错误响应结构
- 错误信息更加详细和友好
- 支持字段级别的错误信息
后续建议
1. 代码审查
- 检查其他handler文件是否还有使用
ShouldBindJSON的地方 - 确保所有新的handler都使用
BindAndValidate
2. 测试验证
- 验证所有API接口的请求绑定是否正常工作
- 测试各种验证错误场景
- 确保错误信息显示正确
3. 文档更新
- 更新开发指南,说明使用
BindAndValidate的最佳实践 - 更新API文档,说明验证规则和错误格式
总结
通过这次更新,我们成功统一了handler中的请求绑定方式,使用h.validator.BindAndValidate替代了ShouldBindJSON。这样的更改带来了更好的代码一致性、更友好的错误处理和更强的验证能力,同时保持了API的向后兼容性。
所有更改都经过了编译测试,确保没有引入任何错误。这为后续的开发工作奠定了良好的基础。