Java 如何优雅的抛出业务异常
作者:kemir_天明 发布时间:2023-11-24 04:04:34
标签:Java,业务,异常
记得上学的时候学习英语,每个英语老师说到英语翻译的时候都会说英语翻译要做到“信、达、雅”。如今做了一名程序员竟然体会我还是想用这三种境界来要求自己,恰逢自己现在所做之项目偏业务,代码的优雅显得格外重要。所以我就想写点这方面的东西,今天就先来说说如何优雅的抛出业务异常。代码千千万,只希望对自己和对大家有所帮助。
针对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
0
投稿
猜你喜欢
- 1.ArrayList 是基数组结构的,需要连续的内存空间从构造函数可以看出,ArrayList内部用一个Object数组来保存数据。对于无
- 一、Jvm加载对象在说Java * 之前,还是要说一下Jvm加载对象的过程,这个依旧是理解 * 的基础性原理:Java类即源代码程序.j
- 前言最常用的对字符串操作的类有三个,分别是String,StringBuilder,StringBuffer,下面将会详细的说说这三个类..
- 表述在一次服务更新后发现每天凌晨0点3秒服务准时挂,开始的时候认为是maven依赖中存在system.exit(3)类似这样的代码,但是我想
- 起源flutter作为一个跨平台的框架,在绘制上体现出了它跨平台的良好性能.那么,它是如何从runApp()后 绘制上屏的呢?本文将与你一起
- mybatis foreach嵌套if标签代码实现:Mapper.java文件List<Map<String, Object&g
- java 网络编程java.net 类 InetAddress 此类表示互联网协议 (IP) 地址。 会抛出异常 UnknownHostEx
- JenkinsJenkins是一个开源的、可扩展的持续集成、交付、部署的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台
- 导语相信大家无论是做前端还是做后端的,都被接口接口文档所折磨过,前端抱怨接口文档和后端给的不一致,后端抱怨写接口文档很麻烦,所以Swagge
- 前言本文介绍在spring mvc中非常重要的注解@ModelAttribute.这个注解可以用在方法参数上,或是方法声明上。这个注解的主要
- 在开发Android应用程序中,经常会自定义View来实现各种各样炫酷的效果,在实现这吊炸天效果的同时,我们往往会定义很多attr属性,这样
- 效果:原图加水印后的图片废话不多说,直接上代码代码:package com.example.demo;import java.awt.Alp
- CompletableFuture 介绍CompletableFuture是1.8引入的新特性,一些比较复杂的异步计算场景,尤其是需要串联多
- 1.前言在Mybatis中需要创建的配置文件有sqlMapconfig.xml,映射文件xxxMapper.xml,而这些文件在idea中并
- 本文作者:Spring_ZYL文章来源:https://blog.csdn.net/gozhuyinglong版权声明:本文版权归作者所有,
- 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档前言这两天在项目中使用到Java的导入导出功能,以前对这块有一定了解,但是没
- 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 一、静态库和动态库的区别1. 静态函数库这类库的
- 1、注解@PathVariable:将请求url中的占位符参数与控制器方法入参绑定起来(Rest风格请求)@RequestHeader:获取
- 一、简单介绍翻看Spring的源码时,发现@Bean注解的源码上标注了Since: 3.0,也就是说,@Bean注解是Spring从3.0版
- 什么是冒泡排序冒泡排序指重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从小到大)错误就把他们交换过来。走访元素的工作是重复