我们有一个像“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的学生的房地产电子邮件必须是唯一的”)
答案 0 :(得分:4)
不确定它会在更多情况下工作,而不仅仅是这个,但确实:
println "${error.objectName}_${error.codes[-1]}".toUpperCase()
让你在附近?