2014-04-22 18 views
1

在Grails框架中用POSTPUT方法發送的實現請求體(JSONXML)的正確方法是什麼?如何在Grails中實現輸入JSON驗證?

在Spring中,有一個@Valid註釋用於註釋方法的參數和一堆字段註釋(例如@NotNull)以及用於自動發送驗證響應的異常映射器。我在Grails中找不到任何類似的東西。

+0

Grails構建了從JSON/XML到域的轉換。然後域可以有限制來驗證數據。這是你在說什麼嗎? – Gregg

+0

一般來說是的。但是,當這個驗證正在完成?當實體從請求的主體轉換爲對象時?或者當對象被保存到數據庫?在Grails中,Spring的'@ Valid'等價物是什麼? – Opal

回答

3

Grails通過域的約束塊執行驗證。例如:

class User { 
    String username 
    String password 

    static constraints = { 
    username nullable: false, maxSize: 50, email: true 
    password nullable: false, maxSize: 64 
    } 
} 

請參閱documentation

驗證域上的一對夫婦不同的動作的過程中進行:

user.save() // validates and only persists if no errors 
user.validate() // validates only 

再次,請參閱文檔。這與Spring的@Valid相似。綜觀其documentation,它指出:結合這麼長作爲 相應的驗證已配置完成後

Spring MVC的將驗證@Valid對象。

什麼使得這與Grails所做的基本相同是它在綁定後發生。對於JSON/XML到域對象轉換,真的是這樣簡單:

def jsonObject = request.JSON 
def instance = new YourDomainClass(jsonObject) 

看到這個answer here

+0

好的。所以據我的理解,我需要在保存實體實例之前手動進行驗證,並且如果有錯誤,例如發送給客戶?是否有任何機制將驗證錯誤發送回客戶端(例如春季的'@ ExceptionHandler')? – Opal

+0

這真的會幫助你閱讀一次文檔和/或拿到一本書。如果你看看我上面的例子,不,你只需要在域上調用save()。如果有錯誤,它將不會持續,您可以從控制器將這些錯誤發送回客戶端。看到這個:http://grails.org/doc/2.1.0/ref/Tags/renderErrors.html – Gregg

+1

好吧@Gregg。非常感謝你。我沒有閱讀文檔,因爲我目前只使用grails來進行簡單的概念驗證,不知道是否會有生產用法。儘管如此,再次感謝您的建議和耐心。 – Opal