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{})
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章