相关文章推荐
读研的人字拖  ·  Java 读取 .properties ...·  4 天前    · 
犯傻的绿茶  ·  clickhouse ...·  2 天前    · 
老实的玉米  ·  springboot+kafka中@Kafk ...·  2 天前    · 
讲道义的大海  ·  ASP.NET Core の Razor ...·  2 天前    · 
憨厚的黄豆  ·  python - ...·  1 年前    · 
逆袭的生菜  ·  Python ...·  1 年前    · 
public class CompanyRuntimeException extends RuntimeException { /** serialVersionUID */ private static final long serialVersionUID = 0L; /** 严重级别 */ protected int severity = CompanyExceptionSeverity.NORMAL; * 空构造器。 public CompanyRuntimeException() { super(); * 构造器。 * @param severity 严重级别 public CompanyRuntimeException(int severity) { super(); this.severity = severity; * 构造器。 * @param message 消息 public CompanyRuntimeException(String message) { super(message); * 构造器。 * @param message 消息 * @param severity 严重级别 public CompanyRuntimeException(String message, int severity) { super(message); this.severity = severity; * 构造器。 * @param cause 原因 public CompanyRuntimeException(Throwable cause) { super(cause); * 构造器。 * @param cause 原因 * @param severity 严重级别 public CompanyRuntimeException(Throwable cause, int severity) { super(cause); this.severity = severity; * 构造器。 * @param message 消息 * @param cause 原因 public CompanyRuntimeException(String message, Throwable cause) { super(message, cause); * 构造器。 * @param message 消息 * @param cause 原因 * @param severity 严重级别 public CompanyRuntimeException(String message, Throwable cause, int severity) { super(message, cause); this.severity = severity; * @return Returns the severity. public int getSeverity() { return severity; * @see java.lang.Throwable#toString() public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append(super.toString()).append(" - severity: "); switch (severity) { case CompanyExceptionSeverity.MINOR: buffer.append("MINOR"); break; case CompanyExceptionSeverity.NORMAL: buffer.append("NORMAL"); break; case CompanyExceptionSeverity.MAJOR: buffer.append("MAJOR"); break; case CompanyExceptionSeverity.CRITICAL: buffer.append("CRITICAL"); break; default: buffer.append("UNKNOWN"); buffer.append("(").append(severity).append(")"); return buffer.toString();
异常级别分类: * 异常严重级别常量。 * @author * @version public interface CompanyExceptionSeverity { /** 轻微 */ int MINOR = 1; /** 一般 */ int NORMAL = 2; /** 重要 */ int MAJOR = 3; /** 严重 */ int CRITICAL = 4;

2. 每个业务的自定义异常类,例如MyPayException【自定义的测试业务】

* 自定义系统运行时异常 * @author * @version public class MyPayException extends CompanyRuntimeException { /** serialVersionUID */ private static final long serialVersionUID = 0L; /** 返回码 */ private MyPayResultCodeEnum resultCode; * 构造函数 * @param resultCode 返回码 public MyPayException(MyPayResultCodeEnum resultCode) { super(); this.resultCode = resultCode; * 构造函数 * @param resultCode 返回码 * @param e 需要传递的异常 public MyPayException(MyPayResultCodeEnum resultCode, Throwable e) { super(e); this.resultCode = resultCode; * 构造函数 * @param resultCode 返回码 * @param message 错误信息 public MyPayException(MyPayResultCodeEnum resultCode, String message) { super(message); this.resultCode = resultCode; @Override public String toString() {//ToStringBuilder ToStringStyle所属于commons-lang jar包 return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); * getter and setter public MyPayResultCodeEnum getResultCode() { return resultCode; public void setResultCode(MyPayResultCodeEnum resultCode) { this.resultCode = resultCode;
3.业务异常信息枚举 * 自定义业务操作返回码枚举 * @author * @version $ public enum MyPayResultCodeEnum { /** 操作成功 */ SUCCESS("SUCCESS", "操作成功"), /** 系统错误 */ SYSTEM_FAILURE("SYSTEM_FAILURE", "系统错误"), /** 参数为空 */ NULL_ARGUMENT("NULL_ARGUMENT", "参数为空"), /** 参数不正确 */ ILLEGAL_ARGUMENT("ILLEGAL_ARGUMENT", "参数不正确"), /** 邮箱非法 */ EMAIL_ILLEGAL("EMAIL_ILLEGAL", "邮箱非法") /** 枚举值 */ private String value; /** 枚举信息 */ private String message; private MyPayResultCodeEnum(String value, String message) { this.value = value; this.message = message; * 根据枚举值获取枚举对象,如果找不到对应的枚举返回<code>null</code> * @param value 枚举值 * @return 枚举对象 public static MyPayResultCodeEnum getEnumByValue(String value) { for (MyPayResultCodeEnum resultCode : MyPayResultCodeEnum.values()) { if (resultCode.getValue().equals(value)) { return resultCode; return null; * getter public String getValue() { return value; public String getMessage() { return message;

4.业务执行捕获异常

public <T> T execute(){
        MyPayResult retResult = new MyPayResult();
        try {
            // 1.业务校验
            // 2.业务执行
            // 3.异常处理
        } catch (MyPayException e) {
            retResult.setSuccess(false);
            retResult.setResultCode(e.getResultCode());
            retResult.setMessage(StringUtil.isNotBlank(e.getMessage()) ? e.getMessage() : e
                .getResultCode().getMessage());
            logger.warn("业务异常," + e.getResultCode().getMessage(), e);
        return (T)retResult;

5.第4中的返回值定义,以供调用端判断是否执行成功还是失败:
import java.io.Serializable;
 * 订购中心业务处理结果
 * @author 
 * @version 
public class MyPayResult implements Serializable {
    /** serialVersionUID */
    private static final long      serialVersionUID = 1L;
    /** 成功标志 */
    protected boolean              success;
    /** 返回码 */
    private MyPayResultCodeEnum resultCode;
    /** 返回信息 */
    protected String               message;
     * 构造函数,默认返回码为“SUCCESS”。
    public MyPayResult() {
        resultCode = MyPayResultCodeEnum.SUCCESS;
        this.message = resultCode.getMessage();
        success = true;
     * 构造函数
     * @param success 成功标志
    public MyPayResult(boolean success) {
        this.success = success;
        this.resultCode = MyPayResultCodeEnum.SYSTEM_FAILURE;
        this.message = resultCode.getMessage();
     * 构造函数
     * @param resultCode 返回码
    public MyPayResult(MyPayResultCodeEnum resultCode) {
        success = resultCode == MyPayResultCodeEnum.SUCCESS;
        this.resultCode = resultCode;
        this.message = resultCode.getMessage();
     * 构造函数
     * @param resultCode 返回码
    public MyPayResult(boolean success, MyPayResultCodeEnum resultCode) {
        this.success = success;
        this.resultCode = resultCode;
        this.message = resultCode.getMessage();
     * 返回结果信息
     * @return 如果resultCode存在,返回resultCode的message,否则返回result中的message字段
    public String findMessage() {
        return StringUtil.isNotBlank(message) ? message : resultCode.getMessage();
     * getters and setters
     * Getter method for property <tt>success</tt>.
     * @return property value of success
    public boolean isSuccess() {
        return success;
     * Setter method for property <tt>success</tt>.
     * @param success value to be assigned to property success
    public void setSuccess(boolean success) {
        this.success = success;
     * Getter method for property <tt>resultCode</tt>.
     * @return property value of resultCode
    public MyPayResultCodeEnum getResultCode() {
        return resultCode;
     * Setter method for property <tt>resultCode</tt>.
     * @param resultCode value to be assigned to property resultCode
    public void setResultCode(MyPayResultCodeEnum resultCode) {
        this.resultCode = resultCode;
     * Getter method for property <tt>message</tt>.
     * @return property value of message
    public String getMessage() {
        return message;
     * Setter method for property <tt>message</tt>.
     * @param message value to be assigned to property message
    public void setMessage(String message) {
        this.message = message;
     * @see java.lang.Object#toString()
    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

6.使用范例:校验邮箱是否合法(可以放到工具类util)

/** Email验证正则表达式 */
    private static final String REGEX_EMAIL = "^(([_\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([_\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?))$";
     * 验证邮件地址格式
     * @param email                 字符串
     * @param message               错误信息
     * @exception MyPayException 如果邮件格式不正确
    public static void notEmail(String email, String message) {
        if (!StringUtil.isEmpty(email) && !Pattern.compile(REGEX_EMAIL).matcher(email).find()) {
            throw new MyPayException(MyPayResultCodeEnum.EMAIL_ILLEGAL, message);
				
一、异常简单介绍:        Throwable 类是 Java 语言中所有错误Error 和异常Exception的超类,而异常分为运行时异常和非运行时异常        1、Error和运行时异常RuntimeException及其子类为非检查异常(unchecked),其它异常为检查异常(checked)。              ① RuntimeException:Runti
public class AppException extends RuntimeException { private static final long serialVersionUID = 1L; private String msg; private int code = 500; public AppException(String msg) { super(msg 在java项目里,异常的使用是比不可少,但是很多的开发者并不知道异常在项目中要怎么使用会更好一些,今天就给大家说说项目中我是怎么使用的,也希望能引出你的更好的使用方法和想法。 我们先来说说,目前很多项目都是怎么处理自定义异常的呢?因为项目采用的是基本都是MVC代码组织模式,所以很多的项目会按层次定义自己的异常,例如:DaoException、ServiceException、ControllerException,还有按照第三发组件定义自定义异常,例如:MysqlExceptioin、Redi.