Documentation ¶
Overview ¶
Example ¶
package main import ( "bytes" "encoding/json" "fmt" "net/http" "strings" "github.com/bytedance/go-tagexpr/binding" "github.com/henrylee2cn/goutil/httpbody" ) func main() { type InfoRequest struct { Name string `path:"name"` Year []int `query:"year"` Email *string `json:"email" vd:"email($)"` Friendly bool `json:"friendly"` Pie float32 `json:"pie,required"` Hobby []string `json:",required"` BodyNotFound *int `json:"BodyNotFound"` Authorization string `header:"Authorization,required" vd:"$=='Basic 123456'"` SessionID string `cookie:"sessionid,required"` AutoBody string AutoNotFound *string } args := new(InfoRequest) binder := binding.New(nil) err := binder.BindAndValidate(args, requestExample(), new(testPathParams)) fmt.Println("bind and validate result:") fmt.Printf("error: %v\n", err) b, _ := json.MarshalIndent(args, "", " ") fmt.Printf("args JSON string:\n%s\n", b) } func requestExample() *http.Request { contentType, bodyReader, _ := httpbody.NewJSONBody(map[string]interface{}{ "email": "henrylee2cn@gmail.com", "friendly": true, "pie": 3.1415926, "Hobby": []string{"Coding", "Mountain climbing"}, "AutoBody": "autobody_test", }) header := make(http.Header) header.Add("Content-Type", contentType) header.Add("Authorization", "Basic 123456") cookies := []*http.Cookie{ {Name: "sessionid", Value: "987654"}, } req := newRequest("http://localhost/info/henrylee2cn?year=2018&year=2019", header, cookies, bodyReader) req.Method = "POST" var w bytes.Buffer req.Write(&w) fmt.Printf("request:\n%s", strings.Replace(w.String(), "\r\n", "\n", -1)) bodyReader.(*bytes.Reader).Seek(0, 0) return req }
Output: request: POST /info/henrylee2cn?year=2018&year=2019 HTTP/1.1 Host: localhost User-Agent: Go-http-client/1.1 Transfer-Encoding: chunked Authorization: Basic 123456 Content-Type: application/json;charset=utf-8 Cookie: sessionid=987654 83 {"AutoBody":"autobody_test","Hobby":["Coding","Mountain climbing"],"email":"henrylee2cn@gmail.com","friendly":true,"pie":3.1415926} 0 bind and validate result: error: <nil> args JSON string: { "Name": "henrylee2cn", "Year": [ 2018, 2019 ], "email": "henrylee2cn@gmail.com", "friendly": true, "pie": 3.1415925, "Hobby": [ "Coding", "Mountain climbing" ], "BodyNotFound": null, "Authorization": "Basic 123456", "SessionID": "987654", "AutoBody": "autobody_test", "AutoNotFound": null }
Index ¶
- func Bind(structPointer interface{}, req *http.Request, pathParams PathParams) error
- func BindAndValidate(structPointer interface{}, req *http.Request, pathParams PathParams) error
- func ResetJSONUnmarshaler(verifyingRequired bool, fn func(data []byte, v interface{}) error)
- func SetErrorFactory(bindErrFactory, validatingErrFactory func(failField, msg string) error)
- func Validate(value interface{}) error
- type Binding
- func (b *Binding) Bind(structPointer interface{}, req *http.Request, pathParams PathParams) error
- func (b *Binding) BindAndValidate(structPointer interface{}, req *http.Request, pathParams PathParams) error
- func (b *Binding) SetErrorFactory(bindErrFactory, validatingErrFactory func(failField, msg string) error) *Binding
- func (b *Binding) Validate(value interface{}) error
- type Error
- type PathParams
- type TagNames
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Bind ¶
func Bind(structPointer interface{}, req *http.Request, pathParams PathParams) error
Bind binds the request parameters.
func BindAndValidate ¶
func BindAndValidate(structPointer interface{}, req *http.Request, pathParams PathParams) error
BindAndValidate binds the request parameters and validates them if needed.
func ResetJSONUnmarshaler ¶
ResetJSONUnmarshaler reset the JSON Unmarshal function. NOTE: verifyingRequired is true if the required tag is supported.
func SetErrorFactory ¶
SetErrorFactory customizes the factory of validation error. NOTE:
If errFactory==nil, the default is used
Types ¶
type Binding ¶
type Binding struct {
// contains filtered or unexported fields
}
Binding binding and verification tool for http request
func Default ¶
func Default() *Binding
Default returns the default binding. NOTE:
path tag name is 'path'; query tag name is 'query'; header tag name is 'header'; cookie tag name is 'cookie'; raw_body tag name is 'raw_body'; form tag name is 'form'; validator tag name is 'vd'; protobuf tag name is 'protobuf'; json tag name is 'json'.
func New ¶
New creates a binding tool. NOTE:
Use default tag name for tagNames fields that are empty
func (*Binding) Bind ¶
func (b *Binding) Bind(structPointer interface{}, req *http.Request, pathParams PathParams) error
Bind binds the request parameters.
func (*Binding) BindAndValidate ¶
func (b *Binding) BindAndValidate(structPointer interface{}, req *http.Request, pathParams PathParams) error
BindAndValidate binds the request parameters and validates them if needed.
type PathParams ¶
type PathParams interface { // Get returns the value of the first parameter which key matches the given name. // If no matching parameter is found, an empty string is returned. Get(name string) (string, bool) }
PathParams parameter acquisition interface on the URL path
type TagNames ¶
type TagNames struct { // PathParam use 'path' by default when empty PathParam string // Query use 'query' by default when empty Query string // Header use 'header' by default when empty Header string // Cookie use 'cookie' by default when empty Cookie string // RawBody use 'raw' by default when empty RawBody string // FormBody use 'form' by default when empty FormBody string // Validator use 'vd' by default when empty Validator string // contains filtered or unexported fields }
TagNames struct tag naming
Source Files ¶
Click to show internal directories.
Click to hide internal directories.