1. 定义接口统一返回标准java
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; @ApiModel(value = "统一返回数据格式") @Getter @Setter public class ResultMsg implements Serializable { @ApiModelProperty(value = "状态码") private int code; @ApiModelProperty(value = "返回结果描述") private String msg; @ApiModelProperty(value = "返回结果") private Object data; public ResultMsg(ResultMsgStatus resultMsgStatus) { this.code = resultMsgStatus.getCode(); this.msg = resultMsgStatus.getMsg(); } public ResultMsg(ResultMsgStatus resultMsgStatus, Object data) { this.code = resultMsgStatus.getCode(); this.msg = resultMsgStatus.getMsg(); this.data = data; } private ResultMsg setMsg(String msg) { this.msg = msg; return this; } public static ResultMsg success(Object data) { return new ResultMsg(ResultMsgStatus.SUCCESS, data); } public static ResultMsg success() { return new ResultMsg(ResultMsgStatus.SUCCESS, ""); } public static ResultMsg failure(String failMsg) { return new ResultMsg(ResultMsgStatus.FAILURE).setMsg(failMsg); } }
2. 定义错误码web
import lombok.Getter; @Getter public enum ResultMsgStatus { /** * 请求失败 */ FAILURE(0, "请求失败"), /** * 请求成功 */ SUCCESS(200, "成功"), /** * Token无效 */ TOKEN_INVALID(401, "Token无效"), /** * 服务器错误 */ SERVER_ERROR(500, "服务器错误"); private int code; private String msg; private ResultMsgStatus(int code, String msg) { this.code = code; this.msg = msg; } }
3. 定义异常基类spring
import com.bubble.salt.msg.ResultMsgStatus; /** * 异常基类,全部自定义的异常类均须要派生自该类 */ public class BaseException extends RuntimeException{ /** * 具体异常码 */ private int code=0; public BaseException(ResultMsgStatus status, Throwable cause) { super(status.getMsg(), cause); this.code=status.getCode(); } public BaseException(ResultMsgStatus status) { super(status.getMsg()); this.code=code; } public BaseException(String msg){ super(msg); this.code = ResultMsgStatus.FAILURE.getCode(); } public BaseException(ResultMsgStatus status, String msg){ super(msg); this.code = status.getCode(); } public int getCode() { return code; } protected void setCode(int code){ this.code=code; } }
4. 自定义异常服务器
import com.bubble.salt.msg.ResultMsgStatus; /** * @BelongsPackage: com.bubble.salt.exception * @CreateTime: 2019-09-19 16:24 * @Description: 用户异常 */ public class UserException extends BaseException { public UserException(ResultMsgStatus status, Throwable cause) { super(status, cause); } public UserException(ResultMsgStatus status) { super(status); } public UserException(String msg) { super(msg); } public UserException(ResultMsgStatus status, String msg) { super(status, msg); } }
5. 全局异常处理this
import com.bubble.salt.msg.ResultMsg; import com.bubble.salt.msg.ResultMsgStatus; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestControllerAdvice; @Slf4j @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseBody public ResultMsg globalException(Exception e) { log.warn(e.getMessage(), e); //更具本身定义的异常进行自本身须要的处理 if (e instanceof UserException) { return new ResultMsg(ResultMsgStatus.TOKEN_INVALID, e.getMessage()); } return ResultMsg.failure("服务器开小差了!"); } }