- ParseXML(XML 请求体绑定, 空请求体返回 nil)为 zogo 版本唯一缺口, 从 go-hua/httpx 并入; 顶层 README 同步补充说明 - 移植 go-hua 全套 httpx 测试(CodeMsg/OkJson/ErrorJson/四种绑定/Validate/ ParseXML)并新增 Handle/HandleResult/空 body 用例; 修正 README 中 wsc.New 笔误为 New
1.5 KiB
1.5 KiB
httpx
Gin 服务的统一出入参收口。
响应
统一信封 {"code":0,"msg":"OK","data":...}:
OkJson(c, data)—— 成功出参ErrorJson(c, err)—— 错误出参;*CodeMsg携带的错误码透出(如 401),其余错误折叠为 code 1New(401, "未登录")构造带码错误
Handler 收口
// 泛型:Parse 取参 → 调 logic → 统一出参
httpx.Handle(c, func(req *CreateReq) (*CreateResp, error) { return svc.Create(req) })
httpx.HandleResult(c, data, err) // 非泛型场景
Parse 参数绑定
Parse(c, &req) 按固定顺序绑定:uri → query → header → json body,全部绑定后统一跑
binding tag 校验(bindingValidator,与 gin 同源 tag 名)。
注意事项:
- 包
init()会设置binding.Validator = nil(关闭 gin 内置校验,避免 query 阶段误报 json 字段的 required)。引入本包即全局生效,服务内不要绕过 Parse 自行 ShouldBind。 - 请求结构体可实现
Validate() error接口做自定义校验,在 binding 校验之前调用。 - body 解析用
json.NewDecoder直解,不触发 gin 内部校验。
ParseXML(自 go-hua/httpx 并入)
XML 报文(如第三方回调)不在 Parse 主流程内,按需显式调用:
if err := httpx.ParseXML(c, &req); err != nil { ... } // 空请求体返回 nil
单元测试覆盖 OkJson/ErrorJson/四种绑定/Validate 失败/ParseXML/Handle/HandleResult (httpx_test.go,自 go-hua/httpx 移植并扩充)。