您的位置:首页 > 其它

定义系统级别的异常代替接口、类中方法处理失败的信息返回

2015-08-23 22:22 375 查看
以前编写代码时,不喜欢在方法中抛出异常。喜欢不管操作成功或失败都喜欢返回结果。按道理这样是没问题的。但是现实的实际项目中业务逻辑层和业务控制层中的逻辑是非常复杂的,往往在这里面会调用其它很多的接口。在调用这些结果往往会对数据处理失败就会停止执行返回错误信息到上一级。按照返回结果的方式的话,就会在每一层代码中有很多的判断,尤其那种需要返回一个对象(比如User)的方法,如果在这个方法中出现错误,我们需要返回错误信息,那么我们就需要在User这个类中添加一个errorMsg变量来处理这种情况。然而在真正的系统中的话有很多方法都要返回对象,那岂不是每个对象对应的类都要增加这个变量。而且在上一层,还需要进行判断。这是多么麻烦的事情啊。

  

  好在JAVA给我们提供了异常,我们可以封装一个我们系统自己的AppException类,在这个类中包含错误码、错误信息、报错模块等信息。当接口中处理的结果是不正确的我们只需抛出这个异常。我们让一级方法就会进行获取,并停止代码往下执行。这样使得我们代码更加的清晰明了,更加具有规范性。同时也使得我们系统性能更好。

AppException我们可以这样定义:

public class AppException extends Exception {
private static final long serialVersionUID = -1848618491499044704L;
private String module;
private String code;
private String description;

public AppException(String module, String code, String message) {
super(message);
this.module = module;
this.code = code;
}

public AppException(String module, String code, String message,
String description) {
super(message);
this.module = module;
this.code = code;
this.description = description;
}

/**
* 产生异常的模块
*
* @return
*/
public String getModule() {
return module;
}

/**
* 错误码
*
* @return
*/
public String getCode() {
return code;
}

/**
* 用户可读描述信息
*
* @return
*/
public String getDescription() {
return description;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getName());
sb.append(": [");
sb.append(module);
sb.append("] - ");
sb.append(code);
sb.append(" - ");
sb.append(getMessage());
if (getDescription() != null) {
sb.append(" - ");
sb.append(getDescription());
}
return sb.toString();
}
}


在代码中使用如:

if (!"00".equals(status)) {
throw new AppException("用户登录", "01",
"账号未激活", "账号未激活");
}
在最顶层代码中获取该异常:

} catch (AppException e) {
LOGGER.error("用户登录异常:" + e.toString(), e);
return new Result(false, e.getMessage());//返回错误信息到页面:(错误信息:账号未激活)
}


注:在spring mvc中返回结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: