曾经编写代码时。不喜欢在方法中抛出异常。
在代码中使用如:
注:在spring mvc中返回结果
喜欢无论操作成功或失败都喜欢返回结果。按道理这样是没问题的。
可是现实的实际项目中业务逻辑层和业务控制层中的逻辑是非常复杂的。往往在这里面会调用其他非常多的接口。
在调用这些结果往往会对数据处理失败就会停止运行返回错误信息到上一级。依照返回结果的方式的话,就会在每一层代码中有非常多的推断,尤其那种须要返回一个对象(比方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中返回结果