ReturnCodeEnum
package com.atguigu.cloud.resp; import lombok.Getter; import java.util.Arrays; /** * @author FGQ * @date 2024-03-23 23:27 * @description **/ @Getter public enum ReturnCodeEnum { /**操作失败**/ RC999("999","操作XXX失败"), /**操作成功**/ RC200("200","success"), /**服务降级**/ RC201("201","服务开启降级保护,请稍后再试!"), /**热点参数限流**/ RC202("202","热点参数限流,请稍后再试!"), /**系统规则不满足**/ RC203("203","系统规则不满足要求,请稍后再试!"), /**授权规则不通过**/ RC204("204","授权规则不通过,请稍后再试!"), /**access_denied**/ RC403("403","无访问权限,请联系管理员授予权限"), /**access_denied**/ RC401("401","匿名用户访问无权限资源时的异常"), RC404("404","404页面找不到的异常"), /**服务异常**/ RC500("500","系统异常,请稍后重试"), RC375("375","数学运算异常,请稍后重试"), INVALID_TOKEN("2001","访问令牌不合法"), ACCESS_DENIED("2003","没有权限访问该资源"), CLIENT_AUTHENTICATION_FAILED("1001","客户端认证失败"), USERNAME_OR_PASSWORD_ERROR("1002","用户名或密码错误"), BUSINESS_ERROR("1004","业务逻辑异常"), UNSUPPORTED_GRANT_TYPE("1003", "不支持的认证模式"); /**自定义状态码**/ private final String code; /**自定义描述**/ private final String message; // 举值-构造-遍历 // 构造 ReturnCodeEnum(String code, String message){ this.code = code; this.message = message; } //遍历枚举V1 public static ReturnCodeEnum getReturnCodeEnum(String code) { for (ReturnCodeEnum element : ReturnCodeEnum.values()) { if(element.getCode().equalsIgnoreCase(code)) { return element; } } return null; } //遍历枚举V2 public static ReturnCodeEnum getReturnCodeEnumV2(String code) { return Arrays.stream(ReturnCodeEnum.values()).filter(x -> x.getCode().equalsIgnoreCase(code)).findFirst().orElse(null); } /*public static void main(String[] args) { System.out.println(getReturnCodeEnumV2("200")); System.out.println(getReturnCodeEnumV2("200").getCode()); System.out.println(getReturnCodeEnumV2("200").getMessage()); }*/ }
ResultData
package com.atguigu.cloud.resp; import lombok.Data; import lombok.experimental.Accessors; /** * @author FGQ * @date 2024-03-23 23:46 * @description **/ @Data @Accessors(chain = true) public class ResultData<T> { private String code; private String message; private T data; private Long timestamp; // 构造函数加时间戳 public ResultData() { this.timestamp = System.currentTimeMillis(); } //泛型 成功 public static <T> ResultData<T> success(T data) { ResultData<T> resultData = new ResultData(); resultData.setCode(ReturnCodeEnum.RC200.getCode()); resultData.setMessage(ReturnCodeEnum.RC200.getMessage()); resultData.setData(data); return resultData; } //泛型 失败 public static <T> ResultData<T> fail(String code, String message) { ResultData<T> resultData = new ResultData(); resultData.setCode(code); resultData.setMessage(message); return resultData; } }
GlobalExceptionHandler
package com.atguigu.cloud.exp; import com.atguigu.cloud.resp.ResultData; import com.atguigu.cloud.resp.ReturnCodeEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; /** * @author FGQ * @date 2024-03-24 00:19 * @description **/ @Slf4j @RestControllerAdvice public class GlobalExceptionHandler { /** * 默认全局异常处理。 * @param e the e * @return ResultData */ @ExceptionHandler(RuntimeException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ResultData<String> exception(Exception e) { System.out.println("----come in GlobalExceptionHandler"); log.error("全局异常信息exception:{}", e.getMessage(), e); return ResultData.fail(ReturnCodeEnum.RC500.getCode(),e.getMessage()); } }