beego设置公共方法返回JSON数据

最近刚学go,想用beego框架开发一些api接口,通过学习指导能直接访问tpl模板文件和打印一些简单的字符串,但不知道怎么返回json数据,通过看文档也不是很明白,后来在网上找到了一篇文章封装了公共方法Error()/Success(),觉得挺方便的,所以学习一下,顺便收藏下来。

按照文档上的操作

this.Data["json"] = json
this.ServeJSON()

通过测试输出的是字符串json
也不知道是哪里出现了问题,于是参考这篇文章设置的公共方法,原文链接:https://www.jianshu.com/p/0101b2037020

首先创建一个基类BaseController ,基类继承beego.Controller
package controllers

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

type BaseController struct {
    beego.Controller
}

type ReturnMsg struct {
    Code int
    Msg  string
    Data interface{}
}

func (this *BaseController) SuccessJson(data interface{}) {

    res := ReturnMsg{
        200, "success", data,
    }
    this.Data["json"] = res
    this.ServeJSON() //对json进行序列化输出
    this.StopRun()
}

func (this *BaseController) ErrorJson(code int, msg string, data interface{}) {

    res := ReturnMsg{
        code, msg, data,
    }

    this.Data["json"] = res
    this.ServeJSON() //对json进行序列化输出
    this.StopRun()
}
然后需要的地方继承这个基类
package admin

import (
        //如果不是同一个包需要引入一下
    //"blog/controllers"
    "blog/models"
)

type CategoryController struct {
        //不是同一个需要这样
    //controllers.BaseController
        BaseController
}

func (this *CategoryController) List() {
    data, err := models.List()
    if err != nil {
        this.ErrorJson(500, err.Error(), nil)
    }

    this.SuccessJson(data)

}

func (this *CategoryController) Create() {
    title := this.GetString("title")

    if title == "" {
        this.ErrorJson(503, "缺少必要参数", nil)
    }

        //省略代码

    this.SuccessJson(title)
}
posted @ 2021-06-16 17:23  不忘前行  阅读(803)  评论(0编辑  收藏  举报