【问题标题】:How to use Play2 ConstraintReads.minLength如何使用 Play2 ConstraintReads.minLength
【发布时间】:2013-12-18 13:45:56
【问题描述】:

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

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

  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] 类型的发散隐式扩展 从 trait DefaultReads 中的方法 ArrayReads 开始

如何解决这个问题?

【问题讨论】:

  • 您在帖子中的版本中至少缺少一个=。请更正错字。

标签: json validation scala playframework-2.1


【解决方案1】:

好的,原来 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(".+"))

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2016-05-24
    相关资源
    最近更新 更多