java - 使用Java URI验证案例类中的url

标签 java scala validation playframework

我有一个案例课:

case class ProfileUrl
(
  profileId : Long,
  socialUrl : String
)

implicit val profileUrlJsonFormat : Format[ProfileUrl] = Json.format[ProfileUrl]


我想验证socialUrl包含有效的URL。我正在考虑使用java.net.URLjava.net.URI。我不想在我从json实例化上述类时为需要运行的URL创建自定义验证器。有没有办法通过包装URL或创建自定义json解析器来做到这一点?无论哪种方式,我将如何去做类似的事情?

最佳答案

一种选择是使用URL regular expressionReads.patternsocialUrl字符串值定义正则表达式约束,如下所示:

import play.api.libs.json._
import play.api.libs.json.Reads._
import play.api.libs.functional.syntax._

case class ProfileUrl(
  profileId : Long,
  socialUrl : String
)

object ProfileUrl {
  val urlRegex =
    """((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)""".r

  implicit val profileUrlReads: Reads[ProfileUrl] = (
    (JsPath \ "profileId").read[Long] and
    (JsPath \ "socialUrl").read[String](pattern(urlRegex, "Malformed URL"))
  )(ProfileUrl.apply _)
}

object UrlJsonValidationExample extends App {
  val str = """{"profileId": 123, "socialUrl": "www.example.com"}"""
  val json = Json.parse(str)
  val profileUrl = json.as[ProfileUrl]
  println(profileUrl)
}

关于java - 使用Java URI验证案例类中的url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50103849/

相关文章:

scala - 带有替代方法的重载方法值

php - Symfony 2.5 addViolationAt 弃用,使用 buildViolation()

java - 使用 @Query 在 intellij 中进行语言注入(inject)

java - Java中用逗号或双引号对分割字符串的优雅算法

java - 是否可以从 Java 检查给定文件/字符串的正确 python 语法

java - 每 2 个单词后拆分字符串并存储到列表中

scala - 在dispatch-classic中使用cookie

scala - 使用 scalacheck 测试有效的状态转换

javascript - Angular Xeditable - 无法使用 onbeforesave 事件获取正确的验证值

excel - 来自存储在单元格中的 CSV 列表的单元格验证