1,先创建一个接口,里面有两个方法,一个是getCode, 一个是getMessage
public interface ExceptionEnums { public int getCode(); public String getMessage(); }
2,创建一个枚举,实现ExceptionEnums里的方法
public enum DBExceptionEnums implements ExceptionEnums{ UNIQUE_KEY(10001, "主键约束错误"); public int code; public String message; private UserEnums(int code, String message){ this.code = code; this.message = message; } @Override public int getCode() { return code; } @Override public String getMessage() { return message; } }
3,定义一个自定义的异常类
public class ServiceException extends RuntimeException{ private ExceptionEnums exceptionEnums; public ServiceException(ExceptionEnums exceptionEnums){ this.exceptionEnums = exceptionEnums; } public ExceptionEnums getExceptionEnums(){ return exceptionEnums; } .....其它get/set方法 }
4,业务代码中抛出ServiceException
if(true){ throw new ServiceException(DBExceptionEnums.UNIQUE_KEY); }
5,Controller处理抛出的异常
try{ }catch(ServiceException se){ logger.dubug(se.getMessage, se); return buildExceptionJSON(se); //返回异常JSON }
buildExceptionJSON(示例)
private String buildExceptionJSON(ServiceException se){ ExceptionEnums enums = se.getExceptionEnums(); return "{'code':"+ enums.getCode+",'message':' "+enums.getMessage()+"'}"; }
这样做的好处是可以高度统一所有异常返回的code及message, 如果需要更改提示信息或代号,只需更改DBExceptionEnums即可,并且可以自行添加多个异常枚举文件来分别对应不同的模板异常信息。代码结构简单,清淅。个人觉得还是一个不错的处理办法!如有更好的,欢迎提出。学习!