1、简单封装
最常想到是一个类封装消息、另一个返回结果
public class CodeMsg {
private int code;
private String msg;
public static CodeMsg SUCCESS = new CodeMsg(0, "success");
public static CodeMsg ERROR = new CodeMsg(500, "服务端异常");
private CodeMsg(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
public class Result<T> implements Serializable {
private int code;
private String msg;
private T data;
public static <T> Result<T> success(T data){
return new Result<T>(data);
}
public static <T> Result<T> error(CodeMsg cm){
return new Result<T>(cm);
}
private Result(T data) {
this.code = 0;
this.msg = "success";
this.data = data;
}
private Result(CodeMsg cm) {
if(cm == null) {
return;
}
this.code = cm.getCode();
this.msg = cm.getMsg();
}
}
2、以枚举作为参数封装
2.1 枚举类
根据业务类型通常定义通用枚举,业务枚举异常;
public enum CodeMsgEnum {
/**
* 通用枚举,各个系统模块可
*/
SUCCESS("200", "成功"),
SREVER_ERROR("500", "服务器内部错误");
private final String code;
private final String message;
CodeMsgEnum(String code, String message) {
this.code = code;
this.message = message;
}
public static CodeMsgEnum getCodeMsgEnumByCode(String code) {
for (CodeMsgEnum codeMsgEnum : CodeMsgEnum.values()) {
if (codeMsgEnum.code.equals(code)) {
return codeMsgEnum;
}
}
return null;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
}
2.2 与异常结合
public class BusinessException extends RuntimeException {
/**
* code
*/
private String code;
/**
* 异常信息
*/
private String message;
public BusinessException() {
}
/**
* 服务端未知异常
*
* @param message
*/
public BusinessException(String message) {
super(message);
this.code = CodeMsgEnum.SREVER_ERROR.getCode();
this.message = message;
}
public BusinessException(String message, Throwable cause) {
super(message, cause);
this.code = CodeMsgEnum.SREVER_ERROR.getCode();
this.message = message;
}
/**
* 返回常用异常类型:
* CodeMsgEnum 通用异常
* @param codeMsgEnum
*/
public BusinessException(CodeMsgEnum codeMsgEnum) {
super(codeMsgEnum.getMessage());
this.code = codeMsgEnum.getCode();
this.message = codeMsgEnum.getMessage();
}
/**
* 异常信息传入:
* 方便每个业务系统定义各自内部异常
* @param code
* @param message
*/
public BusinessException(String code, String message) {
super(message);
this.code = code;
this.message = message;
}
}
2.3 响应结果
public class Result<T> implements Serializable {
private String code;
private String message;
private T data;
public Result() {}
public Result(CodeMsgEnum codeMsgEnum) {
this.code = codeMsgEnum.getCode();
this.message = codeMsgEnum.getMessage();
}
public Result(CodeMsgEnum codeMsgEnum, T data) {
this.code = codeMsgEnum.getCode();
this.message = codeMsgEnum.getMessage();
this.data = data;
}
public Result(String code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
public static <T> Result<T> success(T data) {
return new Result(CodeMsgEnum.SUCCESS, data);
}
public static <T> Result<T> success() {
return new Result(CodeMsgEnum.SUCCESS,null);
}
public static <T> Result<T> error(CodeMsgEnum codeMsgEnum) {
return new Result(codeMsgEnum,null);
}
public static <T> Result<T> error(String code, String msg) {
return new Result(code, msg,null);
}
public static <T> Result<T> error(String msg) {
return new Result(CodeMsgEnum.SREVER_ERROR.getCode(), msg ,null);
}
}
3、枚举封装实现优化
3.1 枚举类
在2的实现中异常情况不需要返回data, 这里我们将枚举再抽象一层
public interface ICodeMsgEnum {
String getCode();
String getMessage();
}
// 通用枚举类
public enum CommonCodeMsgEnum implements ICodeMsgEnum {
SUCCESS("200", "SUCCESS"),
SERVER_BUSY("9998", "服务器繁忙"),
SERVER_ERROR("9999", "网络异常");
/**
* 返回码
*/
private String code;
/**
* 返回消息
*/
private String message;
CommonCodeMsgEnum(String code, String msg) {
this.code = code;
this.message = msg;
}
}
// 业务枚举
public enum ExceptionCodeMsgEnum {
BAD_LICENCE_TYPE("7001", "Bad licence type."),
LICENCE_NOT_FOUND("7002", "Licence not found."),
private String code;
private String message;
ExceptionCodeMsgEnum(String code, String msg) {
this.code = code;
this.message = msg;
}
}
3.2 异常封装
// 异常基类
public class BaseException extends RuntimeException {
String code;
String message;
public BaseException(String code,String msg){
super(msg);
this.code = code;
this.message = msg;
}
public BaseException(ICodeMsgEnum responseEnum) {
super(responseEnum.getMessage());
this.code = responseEnum.getCode();
this.message = responseEnum.getMessage();
}
public BaseException(ICodeMsgEnum responseEnum, Throwable cause) {
super(responseEnum.getMessage(), cause);
this.code = responseEnum.getCode();
this.message = responseEnum.getMessage();
}
}
// 业务异常
public class BusinessException extends BaseException {
private static final long serialVersionUID = 1L;
public BusinessException(ICodeMsgEnum response) {
super(response);
}
public BusinessException(ICodeMsgEnum response, Throwable cause) {
super(response,cause);
}
}
3.3 响应结果
public class Result {
/**
* 返回码
*/
protected String code;
/**
* 返回消息
*/
protected String message;
public Result() {
this(CommonCodeMsgEnum.SUCCESS);
}
public Result(ICodeMsgEnum responseEnum) {
this(responseEnum.getCode(), responseEnum.getMessage());
}
public Result(String code,String msg){
this.code = code;
this.message = msg;
}
}
// 成功调用
public class CommonResult<T> extends Result {
private T data;
public CommonResult() {
super();
}
public CommonResult(T data) {
super();
this.data = data;
}
}
// 失败调用
public class ErrorResult extends Result {
public ErrorResult() {
}
public ErrorResult(String code, String message) {
super(code, message);
}
}