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
}
四,测试效果:
异常:

正常:

浙公网安备 33010602011771号