2013-12-02 3 views
0

Я пытаюсь создать простой валидатор для входящего JSON.Как использовать Play2 ConstraintReads.minLength

Я хочу проверить, что JsObject имеет только одно поле «имя», которое является пустой строкой.

import play.api.libs.json.Reads._ 
    import play.api.libs.json._ 
    val myRead = (__ \ "name").json.pickBranch[JsString](minLength(1)) 

Я ожидал бы myRead быть Считывает [JSObject] или что-то подобное, но то, что я получаю вместо ошибка компиляции:

diverging implicit expansion for type play.api.libs.json.Reads[M] starting with method ArrayReads in trait DefaultReads

, как избавиться от этой проблемы?

+0

У вас отсутствует хотя бы '=' в версии вашего сообщения. Пожалуйста, исправьте опечатки (-ы). –

ответ

0

Хорошо, получилось, что minLength просто не работает с JsString.

Законченный со следующим раствором:

private def myPattern(regex: => Regex, error: String = "error.pattern")(implicit reads:Reads[JsString]) = 
    Reads[JsString](js => reads.reads(js).flatMap { o => 
    regex.unapplySeq(o.as[String]).map(_ => JsSuccess(o)).getOrElse(JsError(error)) 
}) 

val myRead = (__ \ "name").json.pickBranch[JsString](myPattern(new Regex(".+")) 

отлично работает, хотя я скучаю некоторые «стандартные» валидации здесь.

Смежные вопросы