2013-03-06 80 views
3

我們有一個API命令,如「student/create」來創建一個新的學生對象。代碼如下所示:處理Grails域類驗證錯誤的最佳方法

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 [[email protected]]; 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,[email protected]]; default message [Property [{0}] of class [{1}] with value [{2}] must be unique]

我怎樣才能弄清楚,這意味着電子郵件已經在數據庫中使用,這樣我可以告訴API的用戶呢?

(要清楚,我想給喜歡「EMAIL_DUPLICATE」,而不是像「類學生的產權電子郵件值[email protected]必須是唯一的」計算機可讀的消息)

回答

4

不知道它會在更多的情況下工作,而不僅僅是這個,但是:

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

給你附近的任何地方嗎?

+0

我將'error.objectName'改爲'error.field',據我所知它工作的很好。獲取我們的'EMAIL_UNIQUE','FIRSTNAME_SIZE.TOOSMALL','LASTNAME_BLANK'等。我們需要的消息的類型!謝謝! – 2013-03-06 15:08:49