2014-02-09 31 views
1

我想驗證從ajax請求接收到的文本(JSON)。手動驗證文本

val myValidation: Mapping[String] = ///... 

def setNewNameAjax = Action { request => 
    val json = Json parse request.body.asJson.get.toString 
    val name = (json \ "name").toString() 
    // how do I manually validate "name" by myValidation? 
} 

所以其目的是用我的驗證myValidation驗證name。而且,最好在出現驗證錯誤的情況下合理地返回結果。我該怎麼做呢?

目標不是特別驗證JSON。目標是使用自定義vaditor驗證任何類型的文本(在這種情況下,它是myValidation)。

回答

2

Mapping進行驗證實際上是個壞主意。應該使用一個Mapping來處理一個表單域,它期望一個Map[String, String]而不僅僅是一個值來驗證。

但是,您可以使用Mapping[T]驗證值。這只是一個小技巧。總的來說,我會建議使用Constraint[String]來驗證String值,但這裏的工作代碼:

val myValidation: Mapping[String] = ///... 

def setNewNameAjax = Action { request => 
    val json = Json parse request.body.asJson.get.toString 
    val name = (json \ "name").toString() 
    //one mapping may have multiple constraints, so run the validation for all of them and collect the list of ValidationResults 
    val validationResults = myValidation.constraints.map(_(name)) 
    //filter the list - leave only the conditions that failed 
    val failedValidationResults = validationResults.filter(_.isInstanceOf[Invalid]) 
    failedValidationResults match { 
    case Nil => //Validation OK, no constraints failed 
    case _ => //Validation failed, assemble the message and inform the user 
    } 
} 
+0

,如果它是一個純文本或XML,纔有可能這樣做?如果不是,那就不是我想要的。 –

+0

有2個條件:使用myValidation:映射[T],特別是不使用JSON。 –

+0

好的,我誤解了你的問題。我編輯帖子以符合您的意見 – serejja