@@ -7,8 +7,6 @@ description: "Hertz 支持的参数绑定与校验相关功能及用法。"
7
7
8
8
---
9
9
10
- hertz 使用开源库 [ go-tagexpr] ( https://github.com/bytedance/go-tagexpr ) 进行参数的绑定及验证,下面分别介绍参数绑定和参数验证的用法。
11
-
12
10
## 使用方法
13
11
14
12
``` go
@@ -84,7 +82,7 @@ func main() {
84
82
path > form > query > cookie > header > json > raw_body
85
83
```
86
84
87
- > 注:如果请求的 content-type 为 ` application/json ` ,那么会在参数绑定前做一次 json unmarshal 处理作为兜底。
85
+ > 注:如果请求的 content-type 为 ` application/json ` ,` BindAndValidate() ` 、 ` Bind() ` 那么会在参数绑定前做一次 json unmarshal 处理作为兜底。
88
86
89
87
### 必传参数
90
88
@@ -172,7 +170,7 @@ func (m *mockBinder) BindProtobuf(request *protocol.Request, i interface{}) erro
172
170
```
173
171
174
172
目前已拓展的绑定器:
175
- * bytedance/go-tagexpr: https://github.com/hertz-contrib/binding/tree/main/go_tagexpr
173
+ * bytedance/go-tagexpr: https://github.com/hertz-contrib/binding/tree/main/go_tagexpr (重构前使用的绑定库)
176
174
177
175
### 自定义 validator
178
176
> hertz version >= v0.7.0 支持
@@ -219,7 +217,7 @@ func (m *mockValidator) ValidateTag() string {
219
217
** hertz version >= v0.7.0**
220
218
> 暂不支持自定义 bind error
221
219
222
- 自定义错误 error:
220
+ 自定义 validate error:
223
221
``` go
224
222
package main
225
223
import (
@@ -334,6 +332,7 @@ type TestBind struct {
334
332
func main () {
335
333
bindConfig := &binding.BindConfig {}
336
334
// v0.7.0 重构后,在原基础上增加了请求 Request 内容以及路由参数,可方便用户更加灵活的自定义类型解析
335
+ // 注意:只有 tag 成功匹配后,才会走到自定义的逻辑
337
336
bindConfig.MustRegTypeUnmarshal (reflect.TypeOf (Nested{}), func (req *protocol.Request , params param.Params , text string ) (reflect.Value , error ) {
338
337
if text == " " {
339
338
return reflect.ValueOf (Nested{}), nil
@@ -446,6 +445,7 @@ import (
446
445
447
446
func main () {
448
447
bindConfig := binding.NewBindConfig ()
448
+ // 默认 false,当前 Hertz Engine 下生效,多份 engine 实例不会冲突
449
449
bindConfig.LooseZeroMode = true
450
450
h := server.New (server.WithBindConfig (bindConfig))
451
451
...
@@ -458,7 +458,7 @@ func main() {
458
458
import " github.com/cloudwego/hertz/pkg/app/server/binding"
459
459
460
460
func init () {
461
- // 默认 false,全局生效
461
+ // 默认 false,全局生效,如何其他组件也使用相关配置,可能会发生冲突
462
462
binding.SetLooseZeroMode (true )
463
463
}
464
464
```
@@ -474,8 +474,8 @@ import (
474
474
475
475
func main () {
476
476
bindConfig := binding.NewBindConfig ()
477
- bindConfig.UseStdJSONUnmarshaler () // 使用标准库 , hertz 默认使用 sonic 作为 json 序列化/ 反序列化器
478
- // bindConfig.UseThirdPartyJSONUnmarshaler(sonic.Unmarshal) // 使用 sonic 作为 json 序列化/ 反序列化器
477
+ bindConfig.UseStdJSONUnmarshaler () // 使用标准库作为 JSON 反序列化工具 , hertz 默认使用 sonic 作为 JSON 反序列化器
478
+ // bindConfig.UseThirdPartyJSONUnmarshaler(sonic.Unmarshal) // 使用 sonic 作为 JSON 反序列化器
479
479
h := server.New (server.WithBindConfig (bindConfig))
480
480
...
481
481
h.Spin ()
@@ -486,13 +486,13 @@ func main() {
486
486
import " github.com/cloudwego/hertz/pkg/app/server/binding"
487
487
488
488
func init () {
489
- // 使用标准库
489
+ // 使用标准库作为 JSON 反序列化工具
490
490
binding.UseStdJSONUnmarshaler ()
491
491
492
- // 使用 gjson
492
+ // 使用 GJSON 作为 JSON 反序列化工具
493
493
binding.UseGJSONUnmarshaler ()
494
494
495
- // 使用第三方 json unmarshal 方法
495
+ // 使用第三方 JSON 库作为 JSON 反序列化工具
496
496
binding.UseThirdPartyJSONUnmarshaler ()
497
497
}
498
498
```
@@ -511,6 +511,7 @@ type UserInfoResponse struct {
511
511
512
512
### 绑定文件
513
513
> 重构前后使用方式一样,IDL 场景不支持文件绑定
514
+ > 文件类型需为: ` multipart.FileHeader `
514
515
515
516
参数绑定支持绑定文件,使用方法如下:
516
517
0 commit comments