当前位置:网站首页>使用Aspect制作全局异常处理类
使用Aspect制作全局异常处理类
2022-07-05 21:24:00 【哎呦喂O_o嗨】
新增一个注解类
package com.gzzh.web.core.exceptionHandler;
import java.lang.annotation.*;
/** * @Description: 自定义注解处理异常 * @Author yizhixiansheng * @Date 2022/7/1 */
@Documented
@Target({
ElementType.METHOD, ElementType.TYPE}) //可在类或者方法使用
@Retention(RetentionPolicy.RUNTIME) // 运行时异常
public @interface CustomExceptionCatch {
}
新增全局异常处理组件
该组件随spring启动时创建并扫描被 上述注解 所标识的类或方法
package com.gzzh.web.core.exceptionHandler;
import com.gzzh.common.core.domain.AjaxResult;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
/** * @Description: 自定义异常处理类 * @Author yizhixiansheng * @Date 2022/7/1 */
@Component
@Aspect
@Slf4j
public class CustomExceptionHandler {
/** * 自定义全局异常处理类 * @param joinPoint * @return java.lang.Object * @author yizhixiansheng * @create 2022/7/1 **/
@Around("@annotation(com.gzzh.web.core.exceptionHandler.CustomExceptionCatch) || @within(com.gzzh.web.core.exceptionHandler.CustomExceptionCatch)")
public Object around(ProceedingJoinPoint joinPoint) {
Object result = AjaxResult.error("处理数据失败");
// 获取目标类名称
String clazzName = joinPoint.getTarget().getClass().getName();
// 获取目标类方法名称
String methodName = joinPoint.getSignature().getName();
long start = System.currentTimeMillis();
try {
// 调用目标方法
result = joinPoint.proceed();
long time = System.currentTimeMillis() - start;
log.info( "{}: {}: 调用数据耗费: {} ms", clazzName, methodName, time);
}catch (Throwable e){
log.error( "{}: {}: 数据处理失败:{}", clazzName, methodName,e);
}
return result;
}
}
使用
@CustomExceptionCatch
package com.gzzh.web.controller.homePage;
import com.gzzh.common.core.domain.AjaxResult;
import com.gzzh.datafield.homePage.service.IHomePageService;
import com.gzzh.web.core.exceptionHandler.CustomExceptionCatch;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@Slf4j
@RestController
@RequestMapping("/homePage")
public class HomePageController {
@Resource
private IHomePageService homePageService;
/** * 获取综合评价描述 * @return com.gzzh.common.core.domain.AjaxResult * @author yizhixiansheng * @create 2022/6/18 **/
@CustomExceptionCatch
@GetMapping("/getAppraiseDesc")
public AjaxResult getAppraiseDesc() throws Exception{
return AjaxResult.success(homePageService.getAppraiseDesc());
}
/** * 获取综合评价 * @return com.gzzh.common.core.domain.AjaxResult * @author yizhixiansheng * @create 2022/6/18 **/
@CustomExceptionCatch
@GetMapping("/getAppraise/{latnId}")
public AjaxResult getAppraise(@PathVariable Long latnId) throws Exception {
return AjaxResult.success(tbCwlcMarperService.getAppraise(latnId));
}
}
测试结果


边栏推荐
- uni-app 蓝牙通信
- Prior knowledge of machine learning in probability theory (Part 1)
- Postgres establish connection and delete records
- CLion配置visual studio(msvc)和JOM多核编译
- Dictionary tree simple introductory question (actually blue question?)
- Wood board ISO 5660-1 heat release rate mapping test
- 面试官:并发编程实战会吗?(线程控制操作详解)
- Simple interest mode - lazy type
- 浅聊我和一些编程语言的缘分
- Some things make feelings nowhere to put
猜你喜欢

MQ----activeMq

MySQL deep paging optimization with tens of millions of data, and online failure is rejected!

CLion配置visual studio(msvc)和JOM多核编译

LeetCode_ Hash table_ Difficulties_ 149. Maximum number of points on the line

Zhang Lijun: la pénétration de l’incertitude dépend de quatre « invariants»

Influence of oscilloscope probe on measurement bandwidth

Zhang Lijun: penetrating uncertainty depends on four "invariants"

【案例】定位的运用-淘宝轮播图
![Longest swing sequence [greedy practice]](/img/e1/70dc21b924232c7e5e3da023a4bed2.png)
Longest swing sequence [greedy practice]

Realize the function of verifying whether the user has completed login when browsing the page
随机推荐
js常用方法封装
Why can't Chinese software companies produce products? Abandon the Internet after 00; Open source high-performance API gateway component of station B | weekly email exclusive to VIP members of Menon w
Interviewer: will concurrent programming practice meet? (detailed explanation of thread control operation)
Vant source code parsing event Detailed explanation of TS event processing global function addeventlistener
Objects in the list, sorted by a field
终端安全能力验证环境搭建和渗透测试记录
JS common method encapsulation
leetcode:1755. Sum of subsequences closest to the target value
基于vertx-web-sstore-redis的改造实现vertx http应用的分布式session
Pytorch实战——MNIST数据集手写数字识别
Talk about my fate with some programming languages
Access Zadig self-test environment outside the cluster based on ingress controller (best practice)
字典树简单入门题(居然是蓝题?)
Is it necessary for bazel to learn
Problems encountered in office--
EN 438-7 laminated sheet products for building covering decoration - CE certification
使用WebAssembly在浏览器端操作Excel
wpf 获取datagrid 中指定行列的DataGridTemplateColumn中的控件
systemd-resolved 开启 debug 日志
Evolution of zhenai microservice underlying framework from open source component encapsulation to self-development