优雅的实现接口返回信息包封装
前言
接触了不少项目,总结一下感觉比较好的接口返回消息包封装实现。一、结果消息枚举
对不同业务模块的 返回信息枚举 进行统一管理
代码如下(示例):
/**
* 统一接口
*/
public interface IResultMessageEnum<C extends Enum> {
Integer getCode();
String getMsg();
}
/**
* 系统模块枚举
*/
public enum SysResultMessageEnum implements IResultMessageEnum {
SUCCESS(0, "成功"),
FAIL(-1, "失败");
private final Integer code;
private final String msg;
SysResultMessageEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
/**
* 订单模块枚举
*/
public enum OrderResultMessageEnum implements IResultMessageEnum {
SUCCESS(100, "下单成功"),
FAIL(200, "下单失败");
private final Integer code;
private final String msg;
OrderResultMessageEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
/**
* 消息返回VO (测试用)
*/
public class ResultVO extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
/**
* 状态码
*/
public static final String CODE_TAG = "code";
/**
* 返回内容
*/
public static final String MSG_TAG = "msg";
/**
* 数据对象
*/
public static final String DATA_TAG = "data";
/**
* 初始化一个新创建的 ResultVO 对象,使其表示一个空消息。
*/
public ResultVO() {
}
/**
* 初始化一个新创建的 ResultVO 对象
*
* @param code 状态码
* @param msg 返回内容
*/
public ResultVO(int code, String msg) {
super.put(CODE_TAG, code);
super.put(MSG_TAG, msg);
}
public static ResultVO response(IResultMessageEnum resultMessageEnum) {
return new ResultVO(resultMessageEnum.getCode(), resultMessageEnum.getMsg());
}
@Override
public String toString() {
return "ResultVO{Code:"+super.get("code")+",Msg:"+super.get("msg")+"}";
}
}
/**
* 测试Main方法 ResultVO response 方法可读取实现统一接口的枚举类
*/
public class Test {
public static void main(String[] args) {
// 获取枚举返回对象
ResultVO sysResultVO = ResultVO.response(SysResultMessageEnum.SUCCESS);
System.out.println(sysResultVO.toString());
ResultVO orderResultVO = ResultVO.response(OrderResultMessageEnum.SUCCESS);
System.out.println(orderResultVO.toString());
}
}
二、自定义消息返回异常
在异常中组装消息返回对象数据,异常即可返回枚举中异常Code及Msg。
代码如下(示例):
package com.mofang.Exception;
import com.mofang.contants.ResultMessageEnum;
/**
* 自定义异常消息返回 统一处理方法抛出的异常
*
* @param e
* @return
*/
@ExceptionHandler(BaseException.class)
public ResultVO BaseException(BaseException e) {
BaseException baseException = (BaseException) e;
return new ResultVO(baseException.getCode(),baseException.getMsg());
}
/**
* 自定义通用异常处理
*
* @author 花寻
* @date 2021/6/18 11:21
* @copyright 2021 mofang. All rights reserved
*/
public class BaseException extends RuntimeException{
private static final long serialVersionUID = -4339089124482735173L;
/**
* 具体异常码
*/
protected Integer code;
/**
* 异常信息
*/
protected String msg;
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
public BaseException(Integer code, String defaultMessage) {
this.code = code;
this.msg = defaultMessage;
}
public BaseException(IResultMessageEnum resultMessageEnum) {
this(resultMessageEnum.getCode(), resultMessageEnum.getMsg());
}
}
// 使用方法
throw new BaseException(SysResultMessageEnum.FAIL);
总结
业务异常可以非常方便的返回错误信息 ,对大量返回信息可以分枚举类进行管理,便于维护及使用。