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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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