1 Star 0 Fork 0

张宇新/golib

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
render.go 2.87 KB
一键复制 编辑 原始数据 按行查看 历史
张宇新 提交于 5天前 . zlog
package base
import (
"encoding/xml"
"fmt"
"github.com/gin-gonic/gin"
"github.com/pkg/errors"
//"golib/base/zlog"
"net/http"
"strings"
)
// Render 定义render通用类型
type Render interface {
SetReturnCode(int)
SetReturnMsg(string)
SetReturnData(interface{})
GetReturnCode() int
GetReturnMsg() string
}
var newRender func() Render
func RegisterRender(s func() Render) {
newRender = s
}
func newJsonRender() Render {
if newRender == nil {
newRender = defaultNew
}
return newRender()
}
func RenderJson(ctx *gin.Context, code int, msg string, data interface{}) {
r := newJsonRender()
r.SetReturnCode(code)
r.SetReturnMsg(msg)
r.SetReturnData(data)
ctx.JSON(http.StatusOK, r)
return
}
func RenderJsonSuccess(ctx *gin.Context, data interface{}) {
r := newJsonRender()
r.SetReturnCode(0)
r.SetReturnMsg("success")
r.SetReturnData(data)
ctx.JSON(http.StatusOK, r)
return
}
func RenderJsonFail(ctx *gin.Context, err error) {
r := newJsonRender()
code, msg := -1, errors.Cause(err).Error()
switch errors.Cause(err).(type) {
case Error:
code = errors.Cause(err).(Error).ErrNo
msg = errors.Cause(err).(Error).ErrMsg
default:
}
r.SetReturnCode(code)
r.SetReturnMsg(msg)
r.SetReturnData(gin.H{})
ctx.JSON(http.StatusOK, r)
// 打印错误栈
StackLogger(ctx, err)
return
}
func RenderJsonAbort(ctx *gin.Context, err error) {
r := newJsonRender()
switch errors.Cause(err).(type) {
case Error:
r.SetReturnCode(errors.Cause(err).(Error).ErrNo)
r.SetReturnMsg(errors.Cause(err).(Error).ErrMsg)
r.SetReturnData(gin.H{})
default:
r.SetReturnCode(-1)
r.SetReturnMsg(errors.Cause(err).Error())
r.SetReturnData(gin.H{})
}
ctx.AbortWithStatusJSON(http.StatusOK, r)
return
}
func RenderXmlSuccess(ctx *gin.Context, body string) {
var response strings.Builder
response.WriteString(xml.Header)
response.WriteString(body)
ctx.Data(http.StatusOK, "application/xml", []byte(response.String()))
return
}
// default render
var defaultNew = func() Render {
return &DefaultRender{}
}
type DefaultRender struct {
ErrNo int `json:"errNo"`
ErrMsg string `json:"errMsg"`
Data interface{} `json:"data"`
}
func (r *DefaultRender) GetReturnCode() int {
return r.ErrNo
}
func (r *DefaultRender) SetReturnCode(code int) {
r.ErrNo = code
}
func (r *DefaultRender) GetReturnMsg() string {
return r.ErrMsg
}
func (r *DefaultRender) SetReturnMsg(msg string) {
r.ErrMsg = msg
}
func (r *DefaultRender) GetReturnData() interface{} {
return r.Data
}
func (r *DefaultRender) SetReturnData(data interface{}) {
r.Data = data
}
// StackLogger 打印错误栈
func StackLogger(ctx *gin.Context, err error) {
if !strings.Contains(fmt.Sprintf("%+v", err), "\n") {
return
}
//zlog.Error(ctx, "errorStack")
// todo 错误栈输出格式优化
fmt.Printf("-------------------stack-start-------------------\n%+v\n-------------------stack-end-------------------\n", err)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/zhang_yu_xin_2020/golib.git
git@gitee.com:zhang_yu_xin_2020/golib.git
zhang_yu_xin_2020
golib
golib
v1.0.46

搜索帮助