package response import ( "github.com/gin-gonic/gin" "github.com/go-playground/validator/v10" "goskeleton/app/global/consts" "goskeleton/app/global/my_errors" "goskeleton/app/utils/validator_translation" "net/http" "strings" ) func ReturnJson(Context *gin.Context, httpCode int, dataCode int, msg string, data interface{}) { //Context.Header("key2020","value2020") //可以根据实际情况在头部添加额外的其他信息 Context.JSON(httpCode, gin.H{ "code": dataCode, "msg": msg, "data": data, }) } //ReturnJsonFromString 将json字符窜以标准json格式返回(例如,从redis读取json格式的字符串,返回给浏览器json格式) func ReturnJsonFromString(Context *gin.Context, httpCode int, jsonStr string) { Context.Header("Content-Type", "application/json; charset=utf-8") Context.String(httpCode, jsonStr) } // 语法糖函数封装 //Success 直接返回成功 func Success(c *gin.Context, msg string, data interface{}) { ReturnJson(c, http.StatusOK, consts.CurdStatusOkCode, msg, data) } //Fail 失败的业务逻辑 func Fail(c *gin.Context, dataCode int, msg string, data interface{}) { ReturnJson(c, http.StatusBadRequest, dataCode, msg, data) c.Abort() } // ErrorTokenBaseInfo token 基本的格式错误 func ErrorTokenBaseInfo(c *gin.Context) { ReturnJson(c, http.StatusBadRequest, http.StatusBadRequest, my_errors.ErrorsTokenBaseInfo, "") //终止可能已经被加载的其他回调函数的执行 c.Abort() } //ErrorTokenAuthFail token 权限校验失败 func ErrorTokenAuthFail(c *gin.Context) { ReturnJson(c, http.StatusUnauthorized, http.StatusUnauthorized, my_errors.ErrorsNoAuthorization, "") //终止可能已经被加载的其他回调函数的执行 c.Abort() } //ErrorTokenRefreshFail token不符合刷新条件 func ErrorTokenRefreshFail(c *gin.Context) { ReturnJson(c, http.StatusUnauthorized, http.StatusUnauthorized, my_errors.ErrorsRefreshTokenFail, "") //终止可能已经被加载的其他回调函数的执行 c.Abort() } //token 参数校验错误 func TokenErrorParam(c *gin.Context, wrongParam interface{}) { ReturnJson(c, http.StatusUnauthorized, consts.ValidatorParamsCheckFailCode, consts.ValidatorParamsCheckFailMsg, wrongParam) c.Abort() } // ErrorCasbinAuthFail 鉴权失败,返回 405 方法不允许访问 func ErrorCasbinAuthFail(c *gin.Context, msg interface{}) { ReturnJson(c, http.StatusMethodNotAllowed, http.StatusMethodNotAllowed, my_errors.ErrorsCasbinNoAuthorization, msg) c.Abort() } //ErrorParam 参数校验错误 func ErrorParam(c *gin.Context, wrongParam interface{}) { ReturnJson(c, http.StatusBadRequest, consts.ValidatorParamsCheckFailCode, consts.ValidatorParamsCheckFailMsg, wrongParam) c.Abort() } // ErrorSystem 系统执行代码错误 func ErrorSystem(c *gin.Context, msg string, data interface{}) { ReturnJson(c, http.StatusInternalServerError, consts.ServerOccurredErrorCode, consts.ServerOccurredErrorMsg+msg, data) c.Abort() } // ValidatorError 翻译表单参数验证器出现的校验错误 func ValidatorError(c *gin.Context, err error) { if errs, ok := err.(validator.ValidationErrors); ok { wrongParam := validator_translation.RemoveTopStruct(errs.Translate(validator_translation.Trans)) ReturnJson(c, http.StatusBadRequest, consts.ValidatorParamsCheckFailCode, consts.ValidatorParamsCheckFailMsg, wrongParam) } else { errStr := err.Error() // multipart:nextpart:eof 错误表示验证器需要一些参数,但是调用者没有提交任何参数 if strings.ReplaceAll(strings.ToLower(errStr), " ", "") == "multipart:nextpart:eof" { ReturnJson(c, http.StatusBadRequest, consts.ValidatorParamsCheckFailCode, consts.ValidatorParamsCheckFailMsg, gin.H{"tips": my_errors.ErrorNotAllParamsIsBlank}) } else { ReturnJson(c, http.StatusBadRequest, consts.ValidatorParamsCheckFailCode, consts.ValidatorParamsCheckFailMsg, gin.H{"tips": errStr}) } } c.Abort() }