You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.8 KiB

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()
}