乐趣区

关于java:统一异常处理

Java 我的项目中解决异样形式无非两种,要么执行 trycatch 操作,要么执行 throw 操作 (抛
给其它对象解决),无论采纳哪种形式,其目标是让咱们的系统对异样要有反馈。但当初的
问题是咱们如何让这种反馈代码的编写即简略又直观、敌对呢?咱们在解决异样的过程中通
常要遵循肯定的设计规范,例如:
捕捉异样时与抛出的异样必须齐全匹配,或者捕捉异样是抛出异样的父类类型。
▪ 防止间接抛出 RuntimeException, 更不容许抛出 Exception 或者 Throwable, 应
应用有业务含意的自定义异样(例如 ServiceException)。
▪ 捕捉异样后必须进行解决(例如记录日志)。如果不想解决它,须要将异样抛给它
的调用者。
▪ 最外层的逻辑必须解决异样,将其转化成用户能够了解的内容。
▪ 避免出现反复的代码(Don’t Repeat Yourself), 即 DAY 准则。

Web 全局异样解决

当我的项目由多个管制层类中有多个共性异样的解决办法定义时,咱们能够将这些办法提取
到公共的父类对象中,然而这种形式是一种强耦合的实现,不利于代码的保护。咱们还能够
借助 spring 框架中 web 模块定义的全局异样解决标准进行实现,例如定义全局异样解决类,
代码如下:

package com.cy.pj.sys.web.advice;
import com.cy.pj.sys.web.pojo.JsonResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
 * 此注解形容的类为全局异样解决类
 */
@RestControllerAdvice //@ControllerAdvice+@ResponseBody
public class GlobalExceptionHandler {
    private static final Logger log=
    LoggerFactory.getLogger(GlobalExceptionHandler.class);
    /**@ExceptionHandler 注解形容的办法为异样解决办法,
 * 注解中定义的异样类型为办法能够解决的异样类型.*/
 @ExceptionHandler(RuntimeException.class)
    public JsonResult doHandleRuntimeException(RuntimeException e){e.printStackTrace();
        log.debug("exception msg is", e.getMessage());
        return new JsonResult(e);
    }
}
退出移动版