beego 获取request body内容

最近自己用beego写了点东西,发现一些坑,主要是获取http的request body的内容。开始一直在controller里面直接使用GetString之类的方法,后来才知道这个并不是raw data。后来翻了下官网发现其实有文档记录的
获取 Request Body 里的内容

最后自己再封装下,上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
func (this *BaseController) RequestBody() []byte {
return this.Ctx.Input.RequestBody
}
func (this *BaseController) decodeRawRequestBodyJson() map[string]interface{} {
var mm interface{}
requestBody := make(map[string]interface{})
json.Unmarshal(this.RequestBody(), &mm)
if mm != nil {
var m1 map[string]interface{}
m1 = mm.(map[string]interface{})
for k, v := range m1 {
requestBody[k] = v
}
}
return requestBody
}
func (this *BaseController) JsonData() map[string]interface{} {
return this.decodeRawRequestBodyJson()
}

这个是自己有个父类叫BaseController,全部controller都会继承它,之后在别的controller的地方使用的时候就可以如下:

1
2
3
4
requestBody := this.JsonData()
account := requestBody[“account”].(string) //this.GetString(“account”)
password := requestBody[“password”].(string) //this.GetString(“password”)

之前的简单Get方法就可以不要了~:-D

Api转换为小写丢回给Client

对于Go语言的大小写来作为是否为public标识的设计还是很不错的。但,人生总是充满着坑,作为一个良好的代码设计规范有些肯定是要统一遵守的。so,借用以前团队的规范,现在一般我定义的http的response的json结构如下:

1
2
3
4
5
6
7
{
rc: 0, // 返回的code
msg: “”, // 返回的描述
data: { // 返回的数据,可为null
}
}

这样子应该是一个良好的设计。那么问题来了,beego里我们定义的Model类的变量肯定是大写开头的,因为你要在别的文件作调用(别聊getter和setter先),what the fuck,直接把某个对象设置为data就很蛋碎,你就会得到类似这样子的结构:

1
2
3
4
5
6
7
8
9
10
11
12
{
“rc”: 1,
“msg”: “登陆成功”,
“data”: {
“Id”: 5,
“Name”: “”,
“RegisterTime”: 1505806765,
“Vip”: false,
“VipStartTime”: 0,
“VipEndTime”: 0
}
}

全大写这是在逗我呢,好诡异,查了下原来有个办法就是在struct定义的时候给个tag值就好了

1
2
3
4
5
6
7
8
9
10
type User struct {
Id int `orm:”pk;auto” json:”id”`
Name string `json:”name”`
RegisterTime int64 `json:”register_time”`
Phone string `json:”phone”`
Password string `json:”password”`
IsVip bool `json:”vip”`
VipStartTime int64 `json:”vip_start_time”`
VipEndTime int64 `json:”vip_end_time”`
}

这样子得到的response就是如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
“rc”: 1,
“msg”: “登陆成功”,
“data”: {
“id”: 5,
“name”: “”,
“register_time”: 1505806765,
“password”: “MjY4MTMyMmNjZjAwOTRiZGJjNTA2MjFjYzcwOTY0YzE1ZjE5ZjE0ZTU5OTY=”,
“vip”: false,
“vip_start_time”: 0,
“vip_end_time”: 0
}
}

 

beego 获取request body内容
滚动到顶部