Spring统一异常处理

@ExceptionHandler

拦截 Spring 的异常处理需要使用到 ExceptionHandler 注解。Spring 3.0 引入的这个注解可以让我们在一个 handler 方法或者类中统一处理 Controller 抛出的异常,使得写出的代码更加清晰。

首先,来看看对这个注解的解释:

@Target(ElementType.METHOD)             // 这个注解标注在对象的方法上
@Retention(RetentionPolicy.RUNTIME)     // 在运行时有效
@Documented
public @interface ExceptionHandler {

	/**
	 * Exceptions handled by the annotated method. If empty, will default to any
	 * exceptions listed in the method argument list.
   * value 是一个 Class 数组,用于指定需要拦截的异常类。
	 */
	Class<? extends Throwable>[] value() default {};
}

说明:该注解注释的方法可以有灵活的输入参数,通常需要给出异常参数:包括一般的异常或特定的异常(即自定义异常),如果注解自身没有指定异常类,会默认进行映射。

代码实现如下:

/**
 * <h1>全局异常处理</h1>
 * RestControllerAdvice: 组合注解, ControllerAdvice + ResponseBody, 是对 RestController 的功能增强
 * Created by Qinyi.
 */
@RestControllerAdvice
public class GlobalExceptionAdvice {

    /**
     * <h2>对 AdException 进行统一处理</h2>
     * ExceptionHandler: 可以对指定的异常进行拦截
     * 优化: 定义多种类异常, 并实现对应的异常处理. 例如: 推广单元的操作出现异常, 抛出 AdUnitException;
     *  Binlog 解析异常, 抛出 BinlogException
     * */
    @ExceptionHandler(value = AdException.class)
    public CommonResponse<String> handlerAdException(HttpServletRequest req,
                                                     AdException ex) {
        // 统一异常接口的响应
        // 优化: 定义不同类型的异常枚举(异常码和异常信息)
        CommonResponse<String> response = new CommonResponse<>(-1,
                "business error");
        response.setData(ex.getMessage());
        return response;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值