Skip to content

Commit 376b20f

Browse files
authored
optimize(hertz): hertz binding doc (#806)
1 parent f13c6e0 commit 376b20f

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

content/zh/docs/hertz/tutorials/basic-feature/binding-and-validate.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ description: "Hertz 支持的参数绑定与校验相关功能及用法。"
77

88
---
99

10-
hertz 使用开源库 [go-tagexpr](https://github.com/bytedance/go-tagexpr) 进行参数的绑定及验证,下面分别介绍参数绑定和参数验证的用法。
11-
1210
## 使用方法
1311

1412
```go
@@ -84,7 +82,7 @@ func main() {
8482
path > form > query > cookie > header > json > raw_body
8583
```
8684

87-
> 注:如果请求的 content-type 为 `application/json`,那么会在参数绑定前做一次 json unmarshal 处理作为兜底。
85+
> 注:如果请求的 content-type 为 `application/json``BindAndValidate()``Bind()`那么会在参数绑定前做一次 json unmarshal 处理作为兜底。
8886
8987
### 必传参数
9088

@@ -172,7 +170,7 @@ func (m *mockBinder) BindProtobuf(request *protocol.Request, i interface{}) erro
172170
```
173171

174172
目前已拓展的绑定器:
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 (重构前使用的绑定库)
176174

177175
### 自定义 validator
178176
> hertz version >= v0.7.0 支持
@@ -219,7 +217,7 @@ func (m *mockValidator) ValidateTag() string {
219217
**hertz version >= v0.7.0**
220218
> 暂不支持自定义 bind error
221219
222-
自定义错误 error:
220+
自定义 validate error:
223221
```go
224222
package main
225223
import (
@@ -334,6 +332,7 @@ type TestBind struct {
334332
func main() {
335333
bindConfig := &binding.BindConfig{}
336334
// v0.7.0 重构后,在原基础上增加了请求 Request 内容以及路由参数,可方便用户更加灵活的自定义类型解析
335+
// 注意:只有 tag 成功匹配后,才会走到自定义的逻辑
337336
bindConfig.MustRegTypeUnmarshal(reflect.TypeOf(Nested{}), func(req *protocol.Request, params param.Params, text string) (reflect.Value, error) {
338337
if text == "" {
339338
return reflect.ValueOf(Nested{}), nil
@@ -446,6 +445,7 @@ import (
446445

447446
func main() {
448447
bindConfig := binding.NewBindConfig()
448+
// 默认 false,当前 Hertz Engine 下生效,多份 engine 实例不会冲突
449449
bindConfig.LooseZeroMode = true
450450
h := server.New(server.WithBindConfig(bindConfig))
451451
...
@@ -458,7 +458,7 @@ func main() {
458458
import "github.com/cloudwego/hertz/pkg/app/server/binding"
459459

460460
func init() {
461-
// 默认 false,全局生效
461+
// 默认 false,全局生效,如何其他组件也使用相关配置,可能会发生冲突
462462
binding.SetLooseZeroMode(true)
463463
}
464464
```
@@ -474,8 +474,8 @@ import (
474474

475475
func main() {
476476
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 反序列化器
479479
h := server.New(server.WithBindConfig(bindConfig))
480480
...
481481
h.Spin()
@@ -486,13 +486,13 @@ func main() {
486486
import "github.com/cloudwego/hertz/pkg/app/server/binding"
487487

488488
func init() {
489-
// 使用标准库
489+
// 使用标准库作为 JSON 反序列化工具
490490
binding.UseStdJSONUnmarshaler()
491491

492-
// 使用 gjson
492+
// 使用 GJSON 作为 JSON 反序列化工具
493493
binding.UseGJSONUnmarshaler()
494494

495-
// 使用第三方 json unmarshal 方法
495+
// 使用第三方 JSON 库作为 JSON 反序列化工具
496496
binding.UseThirdPartyJSONUnmarshaler()
497497
}
498498
```
@@ -511,6 +511,7 @@ type UserInfoResponse struct {
511511

512512
### 绑定文件
513513
> 重构前后使用方式一样,IDL 场景不支持文件绑定
514+
> 文件类型需为: `multipart.FileHeader`
514515
515516
参数绑定支持绑定文件,使用方法如下:
516517

0 commit comments

Comments
 (0)