使用自定义注解和springAOP捕获Service层异常,并处理自定义异常
一 自定义异常
/**
* 自定义参数为null异常
*/
public class NoParamsException extends Exception {
//用详细信息指定一个异常
public NoParamsException(String message){
super(message);
} //用指定的详细信息和原因构造一个新的异常
public NoParamsException(String message, Throwable cause){
super(message,cause);
} //用指定原因构造一个新的异常
public NoParamsException(Throwable cause) {
super(cause);
}
}
二 自定义注解
/**
* 统一捕获service异常处理注解
*/
@Documented
@Target({ElementType.METHOD, ElementType.TYPE}) //可在类或者方法使用
@Retention(RetentionPolicy.RUNTIME)
public @interface ServiceExceptionCatch {
}
三 注解切面处理类
@Component
@Aspect
@Slf4j
public class ServiceExceptionHandler { @Around("@annotation(com.zhuzher.annotations.ServiceExcepCatch) || @within(com.zhuzher.annotations.ServiceExcepCatch)")
public ResponseMessage serviceExceptionHandler(ProceedingJoinPoint proceedingJoinPoint) {
ResponseMessage returnMsg;
try {
returnMsg = (ResponseMessage) proceedingJoinPoint.proceed();
} catch (Throwable throwable) {
log.error("ServiceExcepHandler serviceExcepHandler failed", throwable);
//单独处理缺少参数异常
if(throwable instanceof NoParamsException) {
returnMsg = ResponseMessage.failture(ErrorCode.ARG_CAN_NOT_BE_EMPTY);
}else{//其他正常返回
returnMsg=ResponseMessage.newErrorsMessage(throwable.getMessage());
}
}
return returnMsg;
}
}
四 使用

即可捕获改异常,并自定义处理逻辑
使用自定义注解和springAOP捕获Service层异常,并处理自定义异常的更多相关文章
- Java在Service层异常封装
dao层不需要抛出异常,应该在service层抛出异常,可以是自定义的异常,也可以包装异常,然后在controller中定义exception handler统一处理或者单独处理. 参考: https ...
- springBoot service层 事务控制
springBoot使用事物比较简单,在Application启动类s上添加@EnableTransactionManagement注解,然后在service层的方法上添加@Transactional ...
- 使用spring aspect控制自定义注解
自定义注解:这里是一个处理异常的注解,当调用方法发生异常时,返回异常信息 /** * ErrorCode: * * @author yangzhenlong * @since 2016/7/21 */ ...
- 转:@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常
继承 ResponseEntityExceptionHandler 类来实现针对 Rest 接口 的全局异常捕获,并且可以返回自定义格式: 复制代码 1 @Slf4j 2 @ControllerAdv ...
- @ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常==》记录
对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service 层抛出运行时异常,Spring 事物管理器就会进行回滚. 如此一来, ...
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
转载:http://itindex.net/detail/50710-springaop-controller-service 从业近二,三年了,第一次写博客,平时做做脚手架或者架构一些基础框架然后给 ...
- springboot Aop配置,并使用自定义注解annotation,并且拦截service层
前言 用Spring Boot的AOP来简化处理自定义注解,并将通过实现一个简单的方法执行判断节点是否开始的状态示列源码. AOP概念 面向侧面的程序设计(aspect-oriented progra ...
- SpringAOP的自定义注解实践
springaop属于spring的重要属性,在java中有相当广泛的用途,大家一般都接触过aop实现事务的管理,在xml里配好声明式事务,然后直接在service上直接加上相应注解即可, 今天我们来 ...
- 【Java EE 学习 24 下】【注解在数据库开发中的使用】【反射+注解+动态代理在事务中的应用service层】
一.使用注解可以解决JavaBean和数据库中表名不一致.字段名不一致.字段数量不一致的问题. 1.Sun公司给jdbc提供的注解 @Table.@Column.@Id.@OneToMany.@One ...
随机推荐
- 配置一个yum私有仓库
使用一台服务器配置私有仓库做yum源,本身使用file,客户端使用http连接 安装http服务: [root@ceph1 ~]# yum -y install httpd 修改配置文件 Docume ...
- 20191121-2 Final发布
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/10062 操作视频:https://www.bilibili.com/vi ...
- vc++简单的vector动态数组实现
#ifndef __MYVECTOR__ #define __MYVECTOR__ #include <Windows.h> #define SUCCESS 1 // 成功 #define ...
- Firefox about:config
about:config Pocket.enabled Pocket 启用 true 打开 false 关闭
- 毕业两年半,入手人生第一款macbook pro
当程序员入手第一款macbook 大家好,我是灰大狼,你们可以叫我灰狼.大狼.甚至是小灰灰. 接下来我主要跟大家分享下作为程序员的我,刚入手一款mac的使用心得. 背景 做程序员三年了,一直用的都是w ...
- 「Luogu P2278」[HNOI2003]操作系统 解题报告
题面 一道模拟题,模拟CPU的处理过程?!省选模拟题 思路: 模拟退火大法+优先队列乱搞 要注意的点 1.空闲时,CPU要处理进程 2.当队列中没有进程时,要先进行判断,然后访问 3.当优先级高的进程 ...
- 利用Tampermonkey(油猴)+ IDM 实现百度云盘大文件下载(IDM安装教程)
关注微信公众号:“指尖创意” 在菜单干货专区软件目录里领取链接: tampermonkey插件是一个免费的浏览器扩展和最为流行的用户脚本管理器,拥有适用于 Chrome, Microsoft Edge ...
- CF749D Leaving Auction set排序查找
CodeForces 749D. Leaving Auction 传送门 There are n people taking part in auction today. The rules of a ...
- codevs 3981 动态最大子段和(线段树)
题目传送门:codevs 3981 动态最大子段和 题目描述 Description 题目还是简单一点好... 有n个数,a[1]到a[n]. 接下来q次查询,每次动态指定两个数l,r,求a[l]到a ...
- Linux学习_菜鸟教程_3
我是在UBANTO上运行Linux的,开机启动时按下shift或者Esc都不能进入到grub,没有百度到可靠的教程. 暂时先这样吧.免得我把系统搞坏了,先学点实用的知识~~ Next Chapter