我们的异常处理类,实际是 动态代理的一个实现。
如果一个异常是检查型异常并且没有在动态代理的接口处声明,那么它将会被包装成UndeclaredThrowableException.
而我们定义的自定义异常,被定义成了检查型异常,导致被包装成了UndeclaredThrowableException
解决
知道原因就很简单了。要么 抛 java.lang.RuntimeException or java.lang.Error 非检查性异常, 要么接口要声明异常。
这里选择 修改 自定义异常为 运行时异常即可
public class RequestLimitException extends RuntimeException {
public RequestLimitException(String message) {
super(message);
}
}
自定义异常尽可能定义成 运行时异常。