在日常開發(fā)中我們難免會遇到各種各樣的異常問題的發(fā)生,但是任何異常如果都在異??赡軙霈F(xiàn)的地方直接去處理會讓業(yè)務(wù)邏輯顯得很臃腫,代碼看上去很冗余。在開發(fā)Web應(yīng)用程序時,異常處理是一項非常重要的任務(wù)。異常處理可以提高程序的健壯性和穩(wěn)定性。Java后端開發(fā)人員可以設(shè)計一個統(tǒng)一的全局異常處理方案來解決異常處理的問題,避免代碼冗余,提高開發(fā)效率。在本文中,我們將介紹如何設(shè)計Java后端的全局異常處理方案。
什么是全局異常處理?
全局異常處理是一種將異常處理代碼從業(yè)務(wù)邏輯中分離出來的技術(shù)。
在這里分兩種全局異常處理的方式:
一、在Java中,全局異常處理使用@ControllerAdvice注解定義一個全局的異常處理類。在該類中,使用@ExceptionHandler注解捕獲異常并進行處理。使用全局異常處理技術(shù),可以統(tǒng)一處理異常,提高代碼的復(fù)用性,降低代碼的冗余度。
如下:文章來源:http://www.zghlxwxcb.cn/news/detail-712277.html
? ? // 全局異常處理類文章來源地址http://www.zghlxwxcb.cn/news/detail-712277.html
@Slf4j
@RestControllerAdvice // @ResponseBody+@ControllerAdvice注解的結(jié)合體,@ControllerAdvice注解表示該類是全局異常處理類
public class ExceptionDeal {
// 根據(jù)括號內(nèi)的異常種類,全局如有相應(yīng)的異常,則會被此注解捕獲,進行方法內(nèi)的下一步操作
@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)可以更方便地實現(xiàn)Java后端的全局統(tǒng)一異常處理。我們可以通過AOP將異常處理代碼從業(yè)務(wù)邏輯代碼中分離出來,降低代碼耦合度,提高代碼的可維護性和可擴展性。
@Component
@Aspect
@Slf4j
public class Aspects {
// 切入點(此處TestDemo類下的所有方法被執(zhí)行時,均會被切面捕獲處理)
@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();
}
}
到了這里,關(guān)于java中的自定義異常處理機制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!