Java 如何优雅的抛出业务异常

作者:kemir_天明 时间:2023-11-24 04:04:34 

记得上学的时候学习英语,每个英语老师说到英语翻译的时候都会说英语翻译要做到“信、达、雅”。如今做了一名程序员竟然体会我还是想用这三种境界来要求自己,恰逢自己现在所做之项目偏业务,代码的优雅显得格外重要。所以我就想写点这方面的东西,今天就先来说说如何优雅的抛出业务异常。代码千千万,只希望对自己和对大家有所帮助。

针对java开发者而言,异常的重要性不言而喻,这里也不再赘述。今天主要说说在业务中利用异常处理机制来实现业务异常的优雅提示。

首先,我们定义一个异常编码接口


public interface IErrorCode {
  public String value();
}

重点来了,我们去实现这个接口


import java.util.EnumMap;

import com.test.IErrorCode;

public enum MyBusinessErrorCode implements IErrorCode {

/**
  * 角色不存在或已被删除
  */
 ERR_MODEL_001,
 /**
  * 角色编码已存在
  */
 ERR_MODEL_002;

private static EnumMap<MyBusinessErrorCode, String> errorCodeMap = new EnumMap<MyBusinessErrorCode, String>(
     MyBusinessErrorCode.class);

static {
   errorCodeMap.put(ERR_MODEL_001, "角色不存在!");
   errorCodeMap.put(ERR_MODEL_002, "角色编码已存在!");
 }

public String value() {
   return errorCodeMap.get(this);
 }
}

下面我们来说说这段代码好在哪里,

  • 统一定义异常提示,易于维护,易于国际化配置化。

  • 采用枚举Map运行效率更高。

  • 代码逻辑清晰,更容易上手,更容易统一风格。

那么如何在代码中去使用呢?

首先,创建一个创建异常的工具类


public class ExceptionUtil {

/**
  * 获取业务异常类
  */
 public static BusinessException CreateBusinessException(
     IErrorCode code) {
   return new BusinessException(code);
 }

/**
  * 获取带数据格式化的业务异常类
  *
  * @param code
  */
 public static BusinessException CreateFormatedBusinessException(BusinessErrorCode code, Object ... object){
   String str = code.value();
   str = String.format(str, object);
   return new BusinessException(code.name(), str, "");
 }

}

在对应的业务方法捕获并处理异常


SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   Date date;
   try {
     // 申请时间
     date = sdf.parse(form.getApplyDateView());
   } catch (ParseException e) {
     throw ExceptionUtil.CreateBusinessException(MyBusinessErrorCode.ERR_RBM_005);
   }

至此,业务异常就得到了优雅的处理。

来源:https://www.cnblogs.com/kemir1105/p/14176250.html

标签:Java,业务,异常
0
投稿

猜你喜欢

  • Android应用中实现手势控制图片缩放的完全攻略

    2023-11-25 16:25:09
  • Java中的守护线程问题

    2023-09-13 11:49:23
  • idea如何设置Git忽略对某些文件或文件夹的版本追踪

    2021-08-24 02:58:15
  • Spring事务管理方法步骤解析

    2021-12-15 20:09:04
  • C#实现自定义定时组件的方法

    2023-06-04 12:36:26
  • Spring Boot + Mybatis 实现动态数据源案例分析

    2023-05-15 12:13:47
  • C#实现判断当前操作用户管理角色的方法

    2023-06-25 09:48:36
  • JWT在OpenFeign调用中进行令牌中继详解

    2023-02-07 04:19:15
  • Android实现WebView删除缓存的方法

    2023-02-19 08:38:22
  • Java基础之重载(Overload)与重写(Override)详解

    2023-07-31 08:10:25
  • 将JavaDoc注释生成API文档的操作

    2023-06-16 18:24:06
  • Java基础题新手练习(二)

    2022-03-10 00:11:57
  • 浅谈C# 构造方法(函数)

    2021-11-23 08:01:49
  • C++中类的默认成员函数详解

    2022-08-01 16:41:04
  • 解决Maven项目中 Invalid bound statement 无效的绑定问题

    2021-08-13 10:30:41
  • Java编写迷宫小游戏

    2021-08-06 12:53:33
  • Java常用的八种排序算法及代码实现+图解

    2022-04-09 13:30:06
  • 详解java开发webservice的几种方式

    2023-03-13 04:31:33
  • JAVA使用POI(XSSFWORKBOOK)读取EXCEL文件过程解析

    2023-03-01 16:36:39
  • android dialog自定义实例详解

    2022-03-15 20:29:22
  • asp之家 软件编程 m.aspxhome.com