如何使用Play2 ConstraintReads.minLength

时间:2013-12-02 18:31:56

标签: json validation scala playframework-2.1

我正在尝试为传入的JSON构建一个简单的验证器。

我想检查JsObject只有一个字段“name”,这是一个非空字符串。

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

我希望 myRead 是一个Reads [JsObject]或类似的东西,但我得到的却是编译错误:

  

为play.api.libs.json.Reads [M]类型分散隐式扩展   从特征DefaultReads

中的方法ArrayReads开始

如何摆脱这个问题?

1 个答案:

答案 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(".+"))

完美无缺,虽然我在这里错过了一些“标准”验证。