package com.iailab.framework.common.pojo; import cn.hutool.core.lang.Assert; import com.iailab.framework.common.exception.ErrorCode; import com.iailab.framework.common.exception.ServiceException; import com.iailab.framework.common.exception.enums.GlobalErrorCodeConstants; import com.fasterxml.jackson.annotation.JsonIgnore; import com.iailab.framework.common.exception.util.ServiceExceptionUtil; import lombok.Data; import java.io.Serializable; import java.util.Objects; /** * 通用返回 * * @param 数据泛型 */ @Data public class CommonResult implements Serializable { /** * 错误码 * * @see ErrorCode#getCode() */ private Integer code; /** * 返回数据 */ private T data; /** * 错误提示,用户可阅读 * * @see ErrorCode#getMsg() () */ private String msg; /** * 将传入的 result 对象,转换成另外一个泛型结果的对象 * * 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。 * * @param result 传入的 result 对象 * @param 返回的泛型 * @return 新的 CommonResult 对象 */ public static CommonResult error(CommonResult result) { return error(result.getCode(), result.getMsg()); } public static CommonResult error(Integer code, String message) { cn.hutool.core.lang.Assert.notEquals(GlobalErrorCodeConstants.SUCCESS.getCode(), code, "code 必须是错误的!"); CommonResult result = new CommonResult<>(); result.code = code; result.msg = message; return result; } public static CommonResult error(ErrorCode errorCode, Object... params) { Assert.notEquals(GlobalErrorCodeConstants.SUCCESS.getCode(), errorCode.getCode(), "code 必须是错误的!"); CommonResult result = new CommonResult<>(); result.code = errorCode.getCode(); result.msg = ServiceExceptionUtil.doFormat(errorCode.getCode(), errorCode.getMsg(), params); return result; } public static CommonResult error(ErrorCode errorCode) { return error(errorCode.getCode(), errorCode.getMsg()); } public static CommonResult success(T data) { CommonResult result = new CommonResult<>(); result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); result.data = data; result.msg = ""; return result; } public static boolean isSuccess(Integer code) { return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode()); } @JsonIgnore // 避免 jackson 序列化 public boolean isSuccess() { return isSuccess(code); } @JsonIgnore // 避免 jackson 序列化 public boolean isError() { return !isSuccess(); } // ========= 和 Exception 异常体系集成 ========= /** * 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常 */ public void checkError() throws ServiceException { if (isSuccess()) { return; } // 业务异常 throw new ServiceException(code, msg); } /** * 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常 * 如果没有,则返回 {@link #data} 数据 */ @JsonIgnore // 避免 jackson 序列化 public T getCheckedData() { checkError(); return data; } public static CommonResult error(ServiceException serviceException) { return error(serviceException.getCode(), serviceException.getMessage()); } }