gin/binding/plain.go
guonaihong 53df00ffe4 binding: add BindPlain function
```go
package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()
	router.POST("/", func(c *gin.Context) {
		var s string
		c.BindPlain(&s)
		c.String(200, s)
	})

	router.Run()
}

// client
// curl -d "test string" 127.0.0.1:8080
// output
// test string
```
2019-09-03 22:50:13 +08:00

48 lines
677 B
Go

package binding
import (
"fmt"
"io/ioutil"
"net/http"
"reflect"
"unsafe"
)
type plainBinding struct{}
func (plainBinding) Name() string {
return "plain"
}
func (plainBinding) Bind(req *http.Request, obj interface{}) error {
if obj == nil {
return nil
}
v := reflect.ValueOf(obj)
for v.Kind() == reflect.Ptr {
if v.IsNil() {
return nil
}
v = v.Elem()
}
all, err := ioutil.ReadAll(req.Body)
if err != nil {
return err
}
if v.Kind() == reflect.String {
v.SetString(*(*string)(unsafe.Pointer(&all)))
return nil
}
if _, ok := v.Interface().([]byte); ok {
v.SetBytes(all)
return nil
}
return fmt.Errorf("type (%T) unkown type", v)
}