首页 > 基础资料 博客日记

java中的自定义异常处理机制

2023-09-15 17:03:57基础资料围观225

本篇文章分享java中的自定义异常处理机制,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识

在日常开发中我们难免会遇到各种各样的异常问题的发生,但是任何异常如果都在异常可能会出现的地方直接去处理会让业务逻辑显得很臃肿,代码看上去很冗余。在开发Web应用程序时,异常处理是一项非常重要的任务。异常处理可以提高程序的健壮性和稳定性。Java后端开发人员可以设计一个统一的全局异常处理方案来解决异常处理的问题,避免代码冗余,提高开发效率。在本文中,我们将介绍如何设计Java后端的全局异常处理方案。

什么是全局异常处理?

全局异常处理是一种将异常处理代码从业务逻辑中分离出来的技术。

在这里分两种全局异常处理的方式:

一、在Java中,全局异常处理使用@ControllerAdvice注解定义一个全局的异常处理类。在该类中,使用@ExceptionHandler注解捕获异常并进行处理。使用全局异常处理技术,可以统一处理异常,提高代码的复用性,降低代码的冗余度。

如下:

    // 全局异常处理类

@Slf4j
@RestControllerAdvice // @ResponseBody+@ControllerAdvice注解的结合体,@ControllerAdvice注解表示该类是全局异常处理类
public class ExceptionDeal {

// 根据括号内的异常种类,全局如有相应的异常,则会被此注解捕获,进行方法内的下一步操作
@ExceptionHandler(ArithmeticException.class)
public String exceptions(ArithmeticException e) {
log.info("全局异常:{}",e.getMessage());
return "算法异常";
}

// 任何空指针异常会被该方法捕获处理
@ExceptionHandler(NullPointerException.class)
public String exceptions1(NullPointerException e) {
log.info("全局异常:{}",e.getMessage());
return "空指针异常";
}
}

// 测试类
@RestController
@RequestMapping("/demo")
public class TestDemo {
@RequestMapping("/test")
public String getInfo(){
int a = 1/0;
return a+"";
}

@RequestMapping("/test1")
public String getInfos(){
String s=null;
BigDecimal bigDecimal = new BigDecimal(s);
return bigDecimal.toString();
}
}

二、利用面向切面编程(AOP)可以更方便地实现Java后端的全局统一异常处理。我们可以通过AOP将异常处理代码从业务逻辑代码中分离出来,降低代码耦合度,提高代码的可维护性和可扩展性。
@Component
@Aspect
@Slf4j
public class Aspects {

// 切入点(此处TestDemo类下的所有方法被执行时,均会被切面捕获处理)
@Pointcut("execution(* com.demo.controller.TestDemo.*(..))")
public void pt() {
}

// 制作切面
@Around("pt()")
public Object handleException(ProceedingJoinPoint pjp) throws Throwable {
Object result;
try {
result = pjp.proceed();
log.info("信息是:{}", result);
} catch (Exception e) {
log.info("异常信息:{}", e.getMessage());
return "切面捕获异常成功!";
}
return result;
}
}
// 测试类
@RestController
@RequestMapping("/demo")
public class TestDemo {
@RequestMapping("/test")
public String getInfo(){
int a = 1/0;
return a+"";
}

@RequestMapping("/test1")
public String getInfos(){
String s=null;
BigDecimal bigDecimal = new BigDecimal(s);
return bigDecimal.toString();
}
}




文章来源:https://www.cnblogs.com/sunyonggao/p/17705224.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云