请求参数与返回值
请求参数
Header参数
可以通过如下的方式获取basic auth中的username与password
func (controller *YourController) youFunc() {
username, password, ok := controller.Ctx.Request.BasicAuth()
}
Query参数
query参数都是key-value对,key都为string,可以通过如下的方法获取不同类型的value:
GetString(key string) string # 若key不存在,返回空串
GetStrings(key string) []string # 若key不存在,返回nil
GetInt(key string) (int64, error) # 若key不存在?
GetBool(key string) (bool, error) # 若key不存在?
GetFloat(key string) (float64, error) # 若key不存在?
示例:
func (this *MainController) Post() {
jsoninfo := this.GetString("jsoninfo")
if jsoninfo == "" {
this.Ctx.WriteString("jsoninfo is empty")
return
}
}
Path参数
假设有如下的路由规则:
beego.Router("/api/users/:id", &api.UserAPI{})
我们可以通过下面的方法获取Path参数:id
的值,返回的是一个string
func (controller *YourController) youFunc() {
id := controller.Ctx.Input.Param(":id")
}
body参数
body参数一般都是Json对象,假设Body参数的示例如下:
{
"param1" : string,
"param2" : integer
}
则在先要定义一个Struct
来接收来匹配这个Json对象:
type Param struct {
Param1 string `json:"param1"`
Param2 int `json:"param2"`
}
然后在Controller的相应方法(比如Post()
)中,使用如下方法来获取参数:
func (c *MainController) Post() {
var param Param
err := json.Unmarshal(c.Ctx.Input.CopyBody(1<<32), ¶m) // 参考harbor
if err != nil {
// do something and abort
}
// fmt.Print(param.Param1)
}
当然,我们的Param
结构体定义了两个变量,但如果请求body中只传了一个参数呢?或者body中多传了一个参数呢?
针对这两种情况,实际的结果如下:
body中少传了参数
这种情况下,少传的那个参数在接收体param
中会默认被设为"零值"
body中多传了参数
多传的参数会被忽略,在接收体param
中拿不到
返回值
json
通过以下的方式可以返回一个Json串,其中Object要为一个可以转化为Json串的对象,比如struct、array。
func (controller *YourController) yourFunc() {
// code
controller.Data["json"] = Object
controller.ServeJSON()
}
string
func (controller *YourController) yourFunc() {
// code
controller.Ctx.WriteString("hello world")
}
无返回值
如果处理函数没有返回值,那么默认会去到模板目录下查找 <Controller名>/<方法名>.tpl
文件进行渲染,例如上面的方法会去寻找 yourcontroller/yourfunc.tpl (文件、文件夹必须小写)。如果不想进行渲染,则需要在函数中显示设置 controller.EnableRender = false
Last updated
Was this helpful?