3

こんにちは、オブジェクトのリストを含むオブジェクトを検証しようとしています。ルート インスタンスは、JSON クライアント ファイルから取得されます。

私はこのようなものを作成しました

@Validateable
class Book {
    String title
    List authors
    static hasMany = [authors : Authors]

    static constraints = {
        authors(nullable:false,validator: { recipients ->
            recipients.every { it.validate() }
        } )     
    }
}

@Validateable
class Author {
    String name
    Integer property

        static constraints = {
        name(nullable:false)    
        property((nullable:false, blank: false))    
    }
}

そして、私はこの方法でコントローラーでそれを検証しようとしています:

class BookController {

def manageBook(Book book){
    if (book.validate()) {
        //Do my stuff
    }else{
        // return error
    }
}
}

しかし、まったく機能せず、コンソールに次のエラーが表示されます。

| Error 2012-05-25 11:26:34,014 [http-bio-8080-exec-1] ERROR errors.GrailsExceptionResolver  - MissingMethodException occurred when processing request: [POST] /BookApp/rest/bookApp/manageBook
No signature of method: org.codehaus.groovy.grails.web.json.JSONObject.validate() is applicable for argument types: () values: []
Possible solutions: wait(), values(). Stacktrace follows:
Message: No signature of method: org.codehaus.groovy.grails.web.json.JSONObject.validate() is applicable for argument types: () values: []
Possible solutions: wait(), values()
   Line | Method
->>  17 | doCall  in dataskaterserver.DeviceSeenWifiData$__clinit__closure1_closure2_closure3
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
|   908 | run . . in     ''
^   680 | run     in java.lang.Thread

誰か助けてください..?

4

1 に答える 1

1

私は解決策を見つけました、それはドキュメントにありました... http://grails.org/doc/latest/guide/validation.html#validationNonDomainAndCommandObjectClasses

Validateable クラスの登録 クラスが Validateable でマークされていない場合でも、フレームワークによって検証可能になる可能性があります。これを行うために必要な手順は、(前述のように) クラスで静的制約プロパティを定義し、Config.groovy@ の grails.validateable.classes プロパティに値を割り当てることによって、クラスについてフレームワークに伝えることです。

grails.validateable.classes = [com.mycompany.myapp.User, com.mycompany.dto.Account]
于 2012-05-25T13:50:53.110 に答える