目的: gin返回restful格式的数据,返回的200,201 的数据 也包括异常时的404/500等情况
全局统一返回RESTful风格数据,主要是实现Respon接口的方法,对返回值在输出之前进行修改。
直接调用下文代码即可
第一种方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| package response
import ( "github.com/gin-gonic/gin" "net/http" )
func Response(context *gin.Context, httpStatus int, code int, data gin.H, msg string) { context.JSON(httpStatus, gin.H{ "code": code, "data": data, "msg": msg, }) }
func Success(context *gin.Context, data gin.H, msg string) { context.JSON(http.StatusOK, gin.H{ "code": 200, "data": data, "msg": msg, }) }
func Fail(context *gin.Context, data gin.H, msg string) { context.JSON(http.StatusOK, gin.H{ "code": 400, "data": data, "msg": msg, }) }
func UnprocessableEntity(context *gin.Context, data gin.H, msg string) { context.JSON(http.StatusUnprocessableEntity, gin.H{ "code": 422, "data": data, "msg": msg, }) }
|
后续可以自己添加方法然后固定的格式
第二种方式
构建一个结构体 然后只有有些无用的值是可以不传的。
这种方式对比上一种更加灵活多变。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package api
import ( "github.com/gin-gonic/gin" "net/http" "reflect" )
type ResponseJson struct { Status int `json:"-"` Code int `json:"code,omitempty"` Msg string `json:"msg,omitempty"` Data any `json:"data,omitempty"` }
func (r ResponseJson) IsEmpty() bool { return reflect.DeepEqual(r, ResponseJson{}) }
func buildStatus(resp ResponseJson, defaultStatus int) int { if resp.Status == 0 { return defaultStatus } return resp.Status }
func HttpResponse(ctx *gin.Context, status int, resp ResponseJson) { if resp.IsEmpty() { ctx.AbortWithStatus(status) return } ctx.AbortWithStatusJSON(status, resp) }
func Success(ctx *gin.Context, resp ResponseJson) { HttpResponse(ctx, buildStatus(resp, http.StatusOK), resp) }
func Fail(ctx *gin.Context, resp ResponseJson) { HttpResponse(ctx, buildStatus(resp, http.StatusBadRequest), resp) }
func ServerFail(ctx *gin.Context, resp ResponseJson) { HttpResponse(ctx, buildStatus(resp, http.StatusInternalServerError), resp)
}
|