code: func (c *Context) ShouldBindBodyWith(obj interface{}, bb binding.BindingBody) (err error) {
  	var body []byte
  	if cb, ok := c.Get(BodyBytesKey); ok {
  		if cbb, ok := cb.([]byte); ok {
  			body = cbb
  		}
  	}
  	if body == nil {
  		body, err = ioutil.ReadAll(c.Request.Body)
  		if err != nil {
  			return err
  		}
  		c.Set(BodyBytesKey, body)
  	}
  	return bb.BindBody(body, obj)
  }
docs: // ShouldBindBodyWith is similar with ShouldBindWith, but it stores the request
  // body into the context, and reuse when it is called again.
  //
  // NOTE: This method reads the body before binding. So you should use
  // ShouldBindWith for better performance if you need to call only once.