Grails声明性控制器异常处理w/基类

Grails声明性控制器异常处理w/基类,grails,inheritance,controller,Grails,Inheritance,Controller,我试图通过让我的所有Grails控制器继承自“BaseController”来避免代码重用。在这个抽象类中,我定义了一个方法,每次继承类抛出这样的异常时都要调用该方法(请参阅以了解为什么会发生这种情况): 然后,在继承的类中,我从控制器操作方法执行以下操作: def changePassword() { .. if (!password.equals(passwordConfirm)) { throw new BadRequestException("Passwo

我试图通过让我的所有Grails控制器继承自“BaseController”来避免代码重用。在这个抽象类中,我定义了一个方法,每次继承类抛出这样的异常时都要调用该方法(请参阅以了解为什么会发生这种情况):

然后,在继承的类中,我从控制器操作方法执行以下操作:

def changePassword() {
    ..
    if (!password.equals(passwordConfirm)) {
        throw new BadRequestException("Password and password confirm did not match.")
    }
    ..
}
为什么不会调用超类的badRequestException方法?如果我将该方法移动到继承控制器(即引发异常的控制器)本身,它就可以正常工作


谢谢

我不知道为什么这不起作用,但你不应该尝试。在特殊情况下使用例外情况;输入错误的密码是常见的错误。除了在逻辑上不合适之外,它还不必要地昂贵;您抛出了一个异常并填充了它的stacktrace,但您没有使用它,只使用了消息。这通常是浪费,但在Groovy中更是如此,因为由于所有额外的Groovy层,您有~3倍或更多的堆栈帧。一个异常没有问题,但不必要地重复产生这一小成本会影响可伸缩性和性能。好的,您能建议一种更好的方法来通知调用API有错误吗?
呈现状态:400,文本:“密码和密码确认不匹配”。
def changePassword() {
    ..
    if (!password.equals(passwordConfirm)) {
        throw new BadRequestException("Password and password confirm did not match.")
    }
    ..
}