处理Grails域类验证错误的最佳方法

时间:2013-03-06 14:28:59

标签: grails groovy error-handling

我们有一个像“student / create”这样的API命令来创建一个新的学生对象。代码如下所示:

def student = new Student(firstName: firstName, lastName: lastName, email: email)

if (! student.validate()) {
    response.error = "UNKNOWN_ERROR" // in case we can't find anything better

    student.errors.allErrors.each { error ->
        // set response.error to an appropriate value
        println error
    }
} else {
    student.save()
}

我们的目标是在验证失败时给出合理的错误消息,例如“EMAIL_DUPLICATE”或“FIRSTNAME_LENGTH”,因此我们希望测试我们针对一组预期错误获得的错误,以便我们可以这样回应。

以下是我们从println获得的内容:

Field error in object 'com.example.Student' on field 'email': rejected value [student@example.com]; codes [com.example.Student.email.unique.error.com.example.Student.email,com.example.Student.email.unique.error.email,com.example.Student.email.unique.error.java.lang.String,com.example.Student.email.unique.error,student.email.unique.error.com.example.Student.email,student.email.unique.error.email,student.email.unique.error.java.lang.String,student.email.unique.error,com.example.Student.email.unique.com.example.Student.email,com.example.Student.email.unique.email,com.example.Student.email.unique.java.lang.String,com.example.Student.email.unique,student.email.unique.com.example.Student.email,student.email.unique.email,student.email.unique.java.lang.String,student.email.unique,unique.com.example.Student.email,unique.email,unique.java.lang.String,unique]; arguments [email,class com.example.Student,student@example.com.org]; default message [Property [{0}] of class [{1}] with value [{2}] must be unique]

我怎么知道这意味着电子邮件已经在数据库中使用,以便我可以告诉API用户?

(很明显,我想提供一条类似于“EMAIL_DUPLICATE”的计算机可读消息,而不是类似于“具有价值student@example.com的学生的房地产电子邮件必须是唯一的”)

1 个答案:

答案 0 :(得分:4)

不确定它会在更多情况下工作,而不仅仅是这个,但确实:

    println "${error.objectName}_${error.codes[-1]}".toUpperCase()

让你在附近?