mirror of
https://github.com/labstack/echo.git
synced 2025-01-12 01:22:21 +02:00
parent
1e9845a414
commit
70c18060bd
19
bind.go
19
bind.go
@ -39,9 +39,6 @@ func (b *DefaultBinder) Bind(i interface{}, c Context) (err error) {
|
||||
}
|
||||
return NewHTTPError(http.StatusBadRequest, "Request body can't be empty")
|
||||
}
|
||||
if err = b.bindPathData(i, c); err != nil {
|
||||
return NewHTTPError(http.StatusBadRequest, err.Error())
|
||||
}
|
||||
ctype := req.Header.Get(HeaderContentType)
|
||||
switch {
|
||||
case strings.HasPrefix(ctype, MIMEApplicationJSON):
|
||||
@ -78,22 +75,6 @@ func (b *DefaultBinder) Bind(i interface{}, c Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (b *DefaultBinder) bindPathData(ptr interface{}, c Context) error {
|
||||
if reflect.TypeOf(ptr).Elem().Kind() == reflect.Slice {
|
||||
return nil
|
||||
}
|
||||
m := make(map[string][]string, len(c.ParamNames()))
|
||||
for _, key := range c.ParamNames() {
|
||||
m[key] = []string{c.Param(key)}
|
||||
}
|
||||
if len(m) >= 0 {
|
||||
if err := b.bindData(ptr, m, "param"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *DefaultBinder) bindData(ptr interface{}, data map[string][]string, tag string) error {
|
||||
typ := reflect.TypeOf(ptr).Elem()
|
||||
val := reflect.ValueOf(ptr).Elem()
|
||||
|
34
bind_test.go
34
bind_test.go
@ -118,7 +118,6 @@ var values = map[string][]string{
|
||||
func TestBindJSON(t *testing.T) {
|
||||
testBindOkay(t, strings.NewReader(userJSON), MIMEApplicationJSON)
|
||||
testBindError(t, strings.NewReader(invalidContent), MIMEApplicationJSON)
|
||||
testBindSlice(t, strings.NewReader(userJSONArray), MIMEApplicationJSON)
|
||||
}
|
||||
|
||||
func TestBindXML(t *testing.T) {
|
||||
@ -141,23 +140,6 @@ func TestBindForm(t *testing.T) {
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
func TestBindRouteParam(t *testing.T) {
|
||||
e := New()
|
||||
r := strings.NewReader(userJSONOnlyName)
|
||||
req := httptest.NewRequest(POST, "/", r)
|
||||
req.Header.Set(HeaderContentType, MIMEApplicationJSON)
|
||||
rec := httptest.NewRecorder()
|
||||
c := e.NewContext(req, rec)
|
||||
c.SetParamNames("id")
|
||||
c.SetParamValues("5")
|
||||
u := new(user)
|
||||
err := c.Bind(u)
|
||||
if assert.NoError(t, err) {
|
||||
assert.Equal(t, 5, u.ID)
|
||||
assert.Equal(t, "Jon Snow", u.Name)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBindQueryParams(t *testing.T) {
|
||||
e := New()
|
||||
req := httptest.NewRequest(GET, "/?id=1&name=Jon+Snow", nil)
|
||||
@ -350,19 +332,3 @@ func testBindError(t *testing.T, r io.Reader, ctype string) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testBindSlice(t *testing.T, r io.Reader, ctype string) {
|
||||
e := New()
|
||||
req := httptest.NewRequest(POST, "/", r)
|
||||
rec := httptest.NewRecorder()
|
||||
c := e.NewContext(req, rec)
|
||||
req.Header.Set(HeaderContentType, ctype)
|
||||
us := []user{}
|
||||
err := c.Bind(&us)
|
||||
if assert.NoError(t, err) {
|
||||
assert.Equal(t, 1, us[0].ID)
|
||||
assert.Equal(t, "Jon Snow", us[0].Name)
|
||||
assert.Equal(t, 2, us[1].ID)
|
||||
assert.Equal(t, "Arya Stark", us[1].Name)
|
||||
}
|
||||
}
|
||||
|
12
echo_test.go
12
echo_test.go
@ -18,18 +18,16 @@ import (
|
||||
|
||||
type (
|
||||
user struct {
|
||||
ID int `json:"id" xml:"id" form:"id" query:"id" param:"id"`
|
||||
ID int `json:"id" xml:"id" form:"id" query:"id"`
|
||||
Name string `json:"name" xml:"name" form:"name" query:"name"`
|
||||
}
|
||||
)
|
||||
|
||||
const (
|
||||
userJSON = `{"id":1,"name":"Jon Snow"}`
|
||||
userJSONArray = `[{"id":1,"name":"Jon Snow"},{"id":2,"name":"Arya Stark"}]`
|
||||
userJSONOnlyName = `{"name":"Jon Snow"}`
|
||||
userXML = `<user><id>1</id><name>Jon Snow</name></user>`
|
||||
userForm = `id=1&name=Jon Snow`
|
||||
invalidContent = "invalid content"
|
||||
userJSON = `{"id":1,"name":"Jon Snow"}`
|
||||
userXML = `<user><id>1</id><name>Jon Snow</name></user>`
|
||||
userForm = `id=1&name=Jon Snow`
|
||||
invalidContent = "invalid content"
|
||||
)
|
||||
|
||||
const userJSONPretty = `{
|
||||
|
Loading…
Reference in New Issue
Block a user