gin: 统一返回json格式数据

一,定义格式类

主要是两个方法: Success和Failed

global/result.go

package global

import (
	"github.com/gin-gonic/gin"
	"time"
)

//返回的结果的内容:
type ResultCont struct {
	Status string  `json:"status"`   //提示状态
	Code    int  `json:"code"`       //提示代码
	Time    string  `json:"time"`    //提示时间
	Msg string  `json:"msg"`         //提示信息
	Data interface{} `json:"data"`   //数据
}


//成功
func Success(data interface{}) (*ResultCont) {

	if (data == nil) {
		data = gin.H{}
	}

	// 格式化时间
	formattedTime := time.Now().Format("2006-01-02 15:04:05")
	//return formatted
	res := &ResultCont{}
	res.Status="success"
	res.Code = 0
	res.Time = formattedTime
	res.Msg = ""
	res.Data = data
	return res
}

//出错,接受code和msg、data
func Failed(code int,msg string,data interface{}) (*ResultCont) {

	if (data == nil) {
		data = gin.H{}
	}
	// 格式化时间
	formattedTime := time.Now().Format("2006-01-02 15:04:05")
	res := &ResultCont{}
	res.Status="failed"
	res.Code = code
	res.Time = formattedTime
	res.Msg = msg
	res.Data = data
    return res
}

二,在controller中应用

controller/ImageController.go

//得到详情
func (ic *ImageController) Detail(c *gin.Context) {

	fmt.Println("controller:开始执行detail方法")

	articleService := service.NewImageService(c)
	article,err:=articleService.GetOneImageById(88821)

	if errors.Is(err, gorm.ErrRecordNotFound) {
		c.JSON(http.StatusOK, global.Failed(404,"记录不存在",nil))
		return
	} else if err!=nil {
		c.JSON(http.StatusInternalServerError, global.Failed(500,err.Error(),nil))
		return
	} else {
		c.JSON(http.StatusOK, global.Success(article))
		return
	}

}

三,异常处理时应用

routes/routes.go

//404,找不到路径时的处理
func HandleNotFound(c *gin.Context) {
	fmt.Println("请求的地址未找到,uri: ", c.Request.RequestURI)
	fmt.Println("stack: ", string(debug.Stack()))
	c.JSON(http.StatusNotFound, global.Failed(404,"资源未找到",nil))
	return
}

四,测试效果:

异常:

正常:

posted @ 2025-02-15 11:10  刘宏缔的架构森林  阅读(183)  评论(0)    收藏  举报