当前位置:网站首页>使用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));
}
}
测试结果
边栏推荐
- 浅聊我和一些编程语言的缘分
- Écrire une interface basée sur flask
- [daily training -- Tencent select 50] 89 Gray code (only after seeing the solution of the problem)
- 五层网络协议
- 请查收.NET MAUI 的最新学习资源
- Sophomore personal development summary
- How to send samples when applying for BS 476-7 display? Is it the same as the display??
- Binary search
- EN 438-7 laminated sheet products for building covering decoration - CE certification
- 秋招将临 如何准备算法面试、回答算法面试题
猜你喜欢
Cross end solution to improve development efficiency rapidly
Teach yourself to train pytorch model to Caffe (I)
Haas506 2.0 development tutorial - Alibaba cloud OTA - PAC firmware upgrade (only supports versions above 2.2)
Zhang Lijun: la pénétration de l’incertitude dépend de quatre « invariants»
Pytoch practice -- MNIST dataset handwritten digit recognition
事项研发工作流全面优化|Erda 2.2 版本如“七”而至
MySQL deep paging optimization with tens of millions of data, and online failure is rejected!
CLion配置visual studio(msvc)和JOM多核编译
Clion configures Visual Studio (MSVC) and JOM multi-core compilation
木板ISO 5660-1 热量释放速率摸底测试
随机推荐
Reading and writing operations of easyexcel
Clion-MinGW编译后的exe文件添加ico图标
面试官:并发编程实战会吗?(线程控制操作详解)
CLion配置visual studio(msvc)和JOM多核编译
Prior knowledge of machine learning in probability theory (Part 1)
Longest swing sequence [greedy practice]
selenium 获取dom内验证码图片
@Validated basic parameter verification, grouping parameter verification and nested parameter verification
[case] Application of element display and hiding -- element mask
one hundred and twenty-three thousand four hundred and fifty-six
Selenium finds the contents of B or P Tags
SQL series (basic) - Chapter 2 limiting and sorting data
Generics of TS
MySQL ifnull usage function
显示屏DIN 4102-1 Class B1防火测试要求
Introduction to TS, constructor and its this, inheritance, abstract class and interface
How to send samples when applying for BS 476-7 display? Is it the same as the display??
木板ISO 5660-1 热量释放速率摸底测试
Is Kai Niu 2980 useful? Is it safe to open an account
张丽俊:穿透不确定性要靠四个“不变”