Skip to content

自定义异常和错误码

Graceful Reponse提供@ExceptionMapper注解,用于进行自定义异常、指定错误码和异常信息。

1. @ExceptionMapper注解属性

  • code: Response中的错误码
  • msg: Response中的错误提示
  • msgReplaceable:错误提示是否可替换,默认为false

仅当msgReplaceable==ture,且异常实例的message不为空时才能替换。

msgReplaceable配置需要版本>=3.3.0。

2. 基本使用

创建自定义异常,采用 @ExceptionMapper注解修饰,注解的 code属性为返回码,msg属性为错误提示信息

java

@ExceptionMapper(code = "1007", msg = "有内鬼,终止交易")
public static final class RatException extends RuntimeException {

}

Service执行具体逻辑,需要抛异常的时候直接抛出去即可,不需要再关心异常与错误码关联的问题

java
public class Service {
    public void illegalTransaction() {
        //需要抛异常的时候直接抛
        if (hasRat()) {
            logger.error("有内鬼终止交易");
            throw new RatException();
        }
        doIllegalTransaction();
    }
}

Controller调用Service

java
public class Controller {
    @RequestMapping("/test3")
    public void test3() {
        logger.info("test3: RuntimeException");
        //Controller中不会进行异常处理,也不会手工set错误码,只关心核心操作,其他的通通交给Graceful Response
        exampleService.illegalTransaction();
    }
}

在浏览器中请求controller的/test3方法,有异常时将会返回:

json
{
  "code": 1007,
  "msg": "有内鬼,终止交易",
  "data": {
  }
}

3. 异常信息替换

创建自定义异常,采用 @ExceptionMapper注解修饰,注解的 code属性为返回码,msg属性为错误提示信息,msgReplaceable设置为true。

java
@ExceptionMapper(code = "1007", msg = "有内鬼,终止交易", msgReplaceable = true)
public class RatException extends RuntimeException {
    public RatException() {
    }

    public RatException(String message) {
        super(message);
    }

    public RatException(String message, Throwable cause) {
        super(message, cause);
    }

    public RatException(Throwable cause) {
        super(cause);
    }

    public RatException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

由于msgReplaceable被设置为true,如果创建异常时指定了错误提示,如以下伪代码:

java
public class Service {
    public void illegalTransaction() {
        //需要抛异常的时候直接抛
        if (hasRat()) {
            logger.error("有内鬼终止交易");
            throw new RatException("创建异常时自定义了异常信息");
        }
        doIllegalTransaction();
    }
}

最终接口将返回

json
{
  "code": 1007,
  "msg": "创建异常时自定义了异常信息",
  "data": {
  }
}