Beego中Api开发返回Json数据的公共方法

公共方法一般放入基类控制器中,如果你没有则可以创建一个base.go并在其中写入一个BaseController作为基类控制器:

package controllers

import (
	"github.com/astaxie/beego"
)

type BaseController struct {
	beego.Controller
}

type JsonReturn struct {
	Msg  string 	    `json:"msg"`
	Code int		    `json:"code"`
	Data interface{}	`json:"data"`		//Data字段需要设置为interface类型以便接收任意数据
	//json标签意义是定义此结构体解析为json或序列化输出json时value字段对应的key值,如不想此字段被解析可将标签设为`json:"-"`	
}

func (c *BaseController) ApiJsonReturn(msg string,code int,data interface{}) {
	var JsonReturn JsonReturn
	JsonReturn.Msg = msg
	JsonReturn.Code = code
	JsonReturn.Data = data
	c.Data["json"] = JsonReturn		//将结构体数组根据tag解析为json
	c.ServeJSON()					//对json进行序列化输出
	c.StopRun()						//终止执行逻辑
}

然后在需要使用此方法的控制器中继承此基类控制器即可,这里需要注意的是基类控制器中的方法名首字母需要大写,否则其他控制器无法访问。
这里我使用IndexController作为演示继承此基类控制器并调用方法来返回调用API获取到的Json数据:
数据表结构和数据在之前的文章有提到:点我查看

package controllers

import (
	"github.com/astaxie/beego/orm"
)

type IndexController struct {
	BaseController
}

type UserDb struct {
	Id  	    int 		`json:"id" orm:"column(id)"`
	Account 	string 		`json:"account" orm:"column(account)"`
	Password    string 		`json:"password" orm:"column(password)"`
	CreateTime  int         `json:"create_time" orm:"column(create_time)"`
	UpdateTime  int         `json:"update_time" orm:"column(update_time)"`
	Status      int         `json:"status"  orm:"column(status)"`
	//json标签意义是定义此结构体解析为json或序列化输出json时value字段对应的key值,如不想此字段被解析可将标签设为`json:"-"`	
	//orm的column标签意义是将orm查询结果解析到此结构体时每个结构体字段对应的数据表字段名
}

func (c *IndexController) Test(){
	var user []UserDb
	o := orm.NewOrm()
	_, err := o.Raw("SELECT * FROM user").QueryRows(&user)		//将查询结果解析到结构体中,对应方式参考结构体中标签说明
	if err==nil{
		c.ApiJsonReturn("请求成功",200,user)		//调用基类控制器中的方法以返回Json数据
	}
}

接下来使用Postman请求IndexController中的Test方法查看请求API得到的Json数据:
这里我注册了自动路由,可以通过 ”控制器名/方法名“ 直接访问,以下是route.go中注册方式:

package routers

import (
	"github.com/astaxie/beego"
	"testbeego/controllers"
)

func init() {
	beego.AutoRouter(&controllers.IndexController{})
}

在这里插入图片描述

发布了29 篇原创文章 · 获赞 1 · 访问量 7828

猜你喜欢

转载自blog.csdn.net/qq_38280150/article/details/102459388