请求参数与返回值

请求参数

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), &param)    // 参考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?